認証 AuthComponent
AuthComponentは三タイプの認証できる。
- FormAuthenticate ログインフォーム POSTで (デフォルト)
- BasicAuthenticate ベーシック認証
- DigestAuthenticate ダイジェストHTTP認証
認証ハンドラの設定
// シンプルな設定 public function initialize() { parent::initialize(); $this->loadComponent('Auth', [ 'authenticate' => [ 'Form' => [ 'fields' => ['username' => 'email', 'password' => 'passwd'] ] ] ]); } >|php| // 'all' を使って設定を記述 $this->Auth->config('authenticate', [ AuthComponent::ALL => ['userModel' => 'Members'], 'Basic', 'Form' ]);
userModelはデフォルトはUsersとなっているのでそうであれば設定不要。
ログインのサンプル
public function login() { if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); return $this->redirect($this->Auth->redirectUrl()); } else { $this->Flash->error(__('Username or password is incorrect')); } } }
unauthenticated()は認証されていないユーザがアクセスした際に呼ばれる。
認証関連のフラッシュメッセージの表示
src/Template/Layout/default.ctp の body 部でecho $this->Flash->render();を加える。
ハッシュ化
DefaultPasswordHasher
namespace App\Model\Entity; use Cake\Auth\DefaultPasswordHasher; use Cake\ORM\Entity; class User extends Entity { // ... protected function _setPassword($password) { if (strlen($password) > 0) { return (new DefaultPasswordHasher)->hash($password); } } // ... }
現在のログインID
$this->Auth->user('id');
で取得できる。
ログアウト
AuthComponent::logout()
public function logout() { return $this->redirect($this->Auth->logout()); }
ユーザ毎のリソース認可
ControllerAuthorize
公開するところ
AuthComponent::allow($actions = null)
公開アクションを拒否
AuthComponent::deny($actions = null)
コントローラのコールバックで
ControllerAuthorize