AuthコンポーネントのパスワードをCakePHPを使用せずハッシュ化する方法(パスワードの生成ルール)
CakePHP2のAuthコンポーネントで使用されるパスワードは、
SimplePasswordHasherでhashTypeをsha256にした場合、
Security.saltをパスワードの前に付けて、sha256でハッシュ化されたもの
がデータベースに保存されています。
[参考記事] CakePHP3のパスワードの生成ルール
PHPのコードで、データベースに保存されているパスワードを生成するには
echo hash('sha256', '【Security.saltの値】' . '【パスワード】');
MySQLのSQL文では
sha2(CONCAT('【Security.saltの値】' , '【パスワード】'),256)
です。
ユーザーを追加するSQL文は次のようになります。
INSERT INTO `users` (`username`, `password`, `created`, `modified`) VALUES ('【アカウント】',sha2(CONCAT('【Security.saltの値】' , '【パスワード】'),256), NOW(), NOW());
Security.saltの値
/cakephp/app/Config/core.php の236行目付近
Configure::write('Security.salt', 'xxxxxxxxxxxxxxxxxxxx');
コントローラの記述例
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class AppController extends Controller {
public $components = array(
'Auth'=> array(
//非ログイン時のリダイレクト先
'loginAction'=>array(
'controller'=>'Auth',
'action'=>'login'
),
//ログイン後のリダイレクト先
'loginRedirect'=>array(
'controller'=>'Top',
'action'=>'index'
),
//ログアウト後のリダイレクト先
'logoutRedirect'=>array(
'controller'=>'Auth',
'action'=>'login'
),
//認証情報(モデルやハッシュ化ルール)
'authenticate' => array(
'Form' => array(
'userModel' => 'User',
'fields' => array(
'username' => 'account',
),
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
)
)
)
)
);
}
モデルの記述例
App::uses('AppModel', 'Model');
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel
{
public $useTable = "users";
public function beforeSave($options = array()) {
if (!empty($this->data[$this->alias]['password'])) {
$passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256'));
$this->data[$this->alias]['password'] = $passwordHasher->hash(
$this->data[$this->alias]['password']
);
}
return true;
}
}
関連記事
- テンプレート(template)側でログイン情報を取得する方法
- 標準のHelperを拡張してカスタマイズする方法 CakePHP2
- 国際化i18n(多言語化)
- CakePHP2系の入手方法・インストール方法
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- CakePHPのバージョンごとのシステム要件
スポンサーリンク