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つだけ表示させる方法
スポンサーリンク





