AuthコンポーネントのパスワードをCakePHPを使用せずハッシュ化する方法(パスワードの生成ルール)
CakePHP3のAuthコンポーネントで使用されるパスワードは、
DefaultPasswordHasherで生成した場合、
アルゴリズムがPASSWORD_DEFAULTのpassword_hashでハッシュ化されたもの
がデータベースに保存されています。
PASSWORD_DEFAULTは、PHP5.5から7.2ではbcryptアルゴリズム
[参考記事] CakePHP2のパスワードの生成ルール
PHPのコードで、データベースに保存されているパスワードを生成するには
echo password_hash('【パスワード】', PASSWORD_DEFAULT, []);
です。
PHP5.5から7.2のPASSWORD_DEFAULTは、PASSWORD_BCRYPTと同じです。
パスワードとハッシュが一致するかどうかはpassword_verifyを使用します。
password_verify('【パスワード】' , '【ハッシュ化されたパスワード】')
コントローラの記述例
namespace App\Controller; use Cake\Controller\Controller; class AppController extends Controller { public function initialize() { parent::initialize(); $this->loadComponent('Auth', array( 'authenticate' => array( 'Form' => array( 'userModel' => 'User', 'fields' => array( 'username' => 'account', 'password' => 'password' ) ) ), // 認証するアクション 'loginAction' => array( 'controller' => 'Auth', 'action' => 'login', 'prefix' => false ), // ログイン成功時のリダイレクト先 'loginRedirect' => array( 'controller' => 'Top', 'action' => 'index', 'prefix' => false ), // ログアウト後のリダイレクト先 'logoutRedirect' => array( 'controller' => 'Auth', 'action' => 'login', 'prefix' => false ), 'authError' => 'アクセス権限がありません' // アクセス制御した時のメッセージ )); } }
モデルの記述例
namespace Model\Entity;
use Cake\ORM\Entity;
use Cake\Validation\Validator;
use Cake\Auth\DefaultPasswordHasher;
class User extends Entity
{
protected function _setPassword($password)
{
if (strlen($password) > 0) {
return (new DefaultPasswordHasher)->hash($password);
}
}
}
関連記事
- テンプレート(template)側でログイン情報を取得する方法
- 標準のHelperを拡張してカスタマイズする方法
- 国際化i18n(多言語化)
- URLをハイフン区切りからアンダーバー区切りやキャメルケースにする方法
- CakePHP3系の入手方法・インストール方法
- コーディング規約のチェックを行う・整形する標準ツール(PHP CodeSniffer)の使い方
- Seedの実行順(外部キー制約などを先に実行させる方法) Foreign key violation
- Seedを実行した後にシーケンスを更新する方法(duplicate key valueエラー)
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- CakePHPのバージョンごとのシステム要件
- 1つのフィールドにバリデーションエラーを1つだけ表示させる方法
スポンサーリンク