CakePHP 認証機能(Auth)
目次
テーブル作成
usersテーブル
id
username
password
role
created
modified
Bake実行結果
Controller
└UsersController.php
Model
└Entity
└User.php
└Table
└UsersTable.php
Template
└Users
└add.ctp
└edit.ctp
└index.ctp
└view.ctp
User.php
↓ を追加
use Cake\Auth\DefaultPasswordHasher;
protected function _setPassword($password){
return (new DefaultPasswordHasher)->hash($password);
}
AppController.php
~\src\Controller\AppController.php
※基底クラスAppContorollerで処理する事により、継承先の全コントローラで認証処理がなされる
【Authコンポーネント追加】
「CakePHP Component操作/Authコンポーネントコントローラ」参照
UsersController.php
login処理
function login(){
if($this->request->isPost()){
$user = $this->Auth->identify();
if(!empty($user)){
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error('ユーザー名、またはパスワードが違います。');
}
}
logout処理
function logout(){
$this->request->session()->destroy();
return $this->redirect($this->Auth->logout());
}
認証例外ページ設定処理
function beforeFilter(Event $event){
parent::beforeFilter($event);
$this->Auth->allow([
'index',
'login',
]);
}
ログイン後処理
public function isAuthorized($user = null){
$action = $this->request->params['action'];
if (in_array($action, ['index','view'])){
return true;
}
if ($user['role'] === 'admin'){
return true;
}
if ($user['role'] === 'guest'){
return true;
}
return false;
}
login.ctp
~\src\Template\Users\login.ctp
「CakePHP Component操作/Authコンポーネントログインページ」参照
POSTデータ
$this->request["params"]=> array(7) {
["controller"]=> string(5) "Users"
["action"]=> string(5) "login"
["pass"]=> array(0) {}
["plugin"]=> NULL
["_matchedRoute"]=> string(22) "/:controller/:action/*"
["_ext"]=> NULL
["isAjax"]=> bool(false)
}
$this->request["data"]=> array(2) {
["username"]=> string(5) "user1"
["password"]=> string(5) "user1"
}