ç§ã®æããã¢ããã«ãã¤ã¸
CakePHPã«ã¯ãã¹ã¯ã¼ãèªè¨¼æ©è½ãªã©ãå®è£ ããããããAuthã³ã³ãã¼ãã³ããæ¨æºã§ä½¿ããããã«ãªã£ã¦ãã¾ãã
ãã¡ããèªè¨¼ã¾ãããç¬èªã«å®è£ ããã®ãè¯ãã§ãããAuthã³ã³ãã¼ãã³ãã¯æè»ãªã®ã§ã楽ã«å®è£ ã§ãã¦ããããã§ãã
Authã³ã³ãã¼ãã³ãèªä½ã¯éå»ã®ãã¼ã¸ã§ã³ããããã¾ãããã3.xã«ãªã£ã¦ãã大ãã使ãæ¹ãå¤ãã£ãã®ã§è§£èª¬ãã¾ãã
Authã³ã³ãã¼ãã³ãã®èªã¿è¾¼ã¿ã¨ã»ããã¢ãã
ãã£ãã使ãæ¹ãè¦ã¦ããã¾ããããã¾ããAuthã³ã³ãã¼ãã³ãã®èªã¿è¾¼ã¿ã¨ãæåã®ã»ããã¢ããããã§ãã
ããã§ã¯æããã使ãããã§ãããFormèªè¨¼ãä¾ã«èª¬æãã¦ããã¾ãããAuthã³ã³ãã¼ãã³ãã¯Basicèªè¨¼ã¨Digestèªè¨¼ã«ã対å¿ãã¦ãã¾ããç¬èªã«æ¡å¼µããã°ãä»ã®èªè¨¼æ¹å¼ã«ã対å¿ã§ãã¾ãã
ã¾ãã¯AppController.phpã§Authã³ã³ãã¼ãã³ããèªã¿è¾¼ã¿ããã©ã¡ã¼ã¿ã¼ã§æåãæå®ãã¦ããã¾ãã
public function initialize() { parent::initialize(); $this->loadComponent('Flash'); // Flashã³ã³ãã¼ãã³ããã¨ã©ã¼ã¡ãã»ã¼ã¸ã®è¡¨ç¤ºãªã©ã«ä½¿ç¨ $this->loadComponent('RequestHandler'); // RequestHandlerã³ã³ãã¼ãã³ããå ¥åããããã¼ã¿ã®åå¾ãªã©ã«ä½¿ç¨ $this->loadComponent('Auth', [ // Authã³ã³ãã¼ãã³ãã®èªã¿è¾¼ã¿ 'authenticate' => [ 'Form' => [ // èªè¨¼ã®ç¨®é¡ãæå®ãForm,Basic,Digestã使ãããããã©ã«ãã¯Form 'fields' => [ // ã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ãã«ä½¿ãã«ã©ã ã®æå®ãçç¥ããå ´åã¯usernameã¨passwordã«ãªã 'username' => 'mail', // ã¦ã¼ã¶ã¼åã®ã«ã©ã ãæå® 'password' => 'pass' //ãã¹ã¯ã¼ãã«ä½¿ãã«ã©ã ãæå® ] ] ], 'loginRedirect' => [ // ãã°ã¤ã³å¾ã«é·ç§»ããã¢ã¯ã·ã§ã³ãæå® 'controller' => 'Tasks', 'action' => 'index' ], 'logoutRedirect' => [ // ãã°ã¢ã¦ãå¾ã«é·ç§»ããã¢ã¯ã·ã§ã³ãæå® 'controller' => 'Users', 'action' => 'login', ], 'authError' => 'ãã°ã¤ã³ã§ãã¾ããã§ããããã°ã¤ã³ãã¦ãã ããã', // ãã°ã¤ã³ã«å¤±æããã¨ãã®Flashã¡ãã»ã¼ã¸ãæå®(çç¥å¯) ]); }
â¼ãã®ä»ã®è¨å®ã«ã¤ãã¦ã¯ä»¥ä¸ã®ãã¼ã¸ããåç §ãã ããã
Entityã«ãããã¹ã¯ã¼ãã®æå·åå¦ç
ãã¹ã¯ã¼ãã¯æå·åãã¦ä¿åãããã§ãããããã®å ´åã¯Entityã§è¡ãã¾ãã
以ä¸ã¯UserEntity(Model/Entity/User.php)ã§ãã¹ã¯ã¼ãããã·ã¥å¦çãå®è£ ããã¨ããã§ãã
use Cake\Auth\DefaultPasswordHasher; ããããã ããããã /** * ãã¹ã¯ã¼ãä¿åæã®ããã·ã¥å * @param string $password ãã¹ã¯ã¼ãæåå * @return string ããã·ã¥åããããã¹ã¯ã¼ã */ protected function _setPassword($password) { return (new DefaultPasswordHasher)->hash($password); }
ããã§ã¯CakePHPã®æ¨æºã§ä½¿ããDefaultPasswordHasherã使ã£ã¦ãã¾ããããã·ã¥ã§ä½¿ãsaltã¯app.phpã«è¨è¼ããã¦ãã¾ãã
/** * Security and encryption configuration * * - salt - A random string used in security hashing methods. * The salt value is also used as the encryption key. * You should treat it as extremely sensitive data. */ 'Security' => [ 'salt' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' ],
Entityã§ã_setââãã¨ããprotectedã¡ã½ãããå¼ã¶ãã¨ã§ãââã¨ããã«ã©ã ããã¼ã¿ãã¼ã¹ã«ä¿åããç´åã«ãå¤ãç·¨éã§ãã¾ããââã®é¨åã¯ãã£ã¡ã«è¨æ³ã§ãã
ãã©ã¡ã¼ã¿ã¼ã«ã¯ãã«ã©ã åããã£ã¡ã«ããã¯è¨æ³ã§æå®ãã¾ããããã«ä¿åãããã¨ãã¦ãããã¼ã¿ãå ¥ã£ã¦ãã¾ãã
ä¸è¨ã§ã¯ã_setPasswordã¨ãããã¨ã§ãpasswordãä¿åããåã«ããã·ã¥å¦çãè¡ã£ã¦ãã¾ãã
â¼ãã®ãããã®Entityã®åãã¯ä»¥ä¸ã®å ¬å¼ããã¥ã¡ã³ãã«æ¸ããã¦ãã¾ãã
identifyã¡ã½ããã«ããèªè¨¼å¦çã®å®è£
å®éã«èªè¨¼ããå¦çãå®è£ ãã¦ããã¾ãããã
ãã°ã¤ã³æã«Postãããã¢ã¯ã·ã§ã³ãå®è£ ãã¦ããã¾ããããã§ã¯UsersController.phpã®login()ã¡ã½ããã使ãæ³å®ã§æ¸ãã¦ãã¾ãã
protected function login() { $user = $this->Auth->identify(); // Postãããã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ãããã¨ã«ãã¼ã¿ãã¼ã¹ãæ¤ç´¢ãã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ãã«è©²å½ããã¦ã¼ã¶ã¼ãreturnããã if ($user) { // 該å½ããã¦ã¼ã¶ã¼ãããã°ãã°ã¤ã³å¦ç $this->Auth->setUser($user); return $this->Auth->redirectUrl(); } else { // 該å½ããã¦ã¼ã¶ã¼ãããªããã°ã¨ã©ã¼ throw new UnauthorizedException('ã¡ã¼ã«ã¢ãã¬ã¹ããã¹ã¯ã¼ããééã£ã¦ãã¾ã'); } }
ãã¤ã©ã¤ãç®æãå®éã®ãã°ã¤ã³å¦çã§ãã
identify()ã使ãã¨ãã¦ã¼ã¶ã¼ããå ¥åããããã¼ã¿ã$this->requestããåé ã§è¨å®ããã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ããèªã¿åãããã¼ã¿ãã¼ã¹ã«è©²å½ããã¦ã¼ã¶ã¼ãããã調ã¹ã¦ããã¾ãã
ããã¦ã該å½ããã¦ã¼ã¶ã¼ãããã°ãã®ã¦ã¼ã¶ã¼ãªãã¸ã§ã¯ããåå¾ãã¾ããã¤ã¾ãããã®ã¦ã¼ã¶ã¼ã§ãã°ã¤ã³ç¶æ ã«ããã°è¯ãã¨ãããã¨ã§ãã
setUser()ã¯ã»ãã·ã§ã³å ã«ã¦ã¼ã¶ã¼æ å ±ãä¿æãã¦ããã¾ããã¡ãªã¿ã«ãããã§ä¿åããããã¼ã¿ã¯$this->Auth->user()ã§åå¾ãããã¨ãã§ãã¾ãã
redirectUrl()ã§ã¯ãåé ã§è¨å®ãããã°ã¤ã³å¾ã®URLã«ãªãã¤ã¬ã¯ããã¦ããã¾ãã
ããã§æä½éå¿ è¦ãªãã°ã¤ã³å¦çã¯å®è£ ã§ããã¯ãã§ãã
â¼ãã®ãããã®å¦çã¯ä»¥ä¸ã®å ¬å¼ããã¥ã¡ã³ãã«è©³ç´°ãªè¨è¿°ãããã¾ãã
ãã°ã¢ã¦ãå¦çã®å®è£
ç¶ãã¦ãã°ã¢ã¦ãå¦çãå®è£ ãã¾ããããããã¯ã¨ã¦ãç°¡åã§ãã
/** * ãã°ã¢ã¦ã * @return bool */ public function logout() { $this->request->session()->destroy(); // ã»ãã·ã§ã³ã®ç ´æ£ return $this->redirect($this->Auth->logout()); // ãã°ã¢ã¦ãå¦ç }
ãã¤ã©ã¤ãç®æã§ãã°ã¢ã¦ãå¦çã¨ãåé ã§æå®ãããã°ã¢ã¦ãå¾ã®URLã¸ã®ãªãã¤ã¬ã¯ããè¡ã£ã¦ãã¾ãã
allowã¡ã½ããã«ãããã°ã¤ã³ä¸è¦ã¢ã¯ã·ã§ã³ã®æå®
ã¦ã¼ã¶ã¼æ°è¦ç»é²å¦çãªã©ã®ãã°ã¤ã³ä¸è¦ãªãã¼ã¸ãæå®ããæ¹æ³ãè¦ã¦ããã¾ãããã
Controllerã®beforeFilterã§allow()ã®å¼æ°ã«ã¢ã¯ã·ã§ã³åãæå®ãã¾ããããã§æå®ãããã¢ã¯ã·ã§ã³ã¯ããã°ã¤ã³ããã«è¡¨ç¤ºã§ããããã«ãªãã¾ãã
/** * beforeFilter * @param Event $event ã¤ãã³ããªãã¸ã§ã¯ã * @return void */ public function beforeFilter(Event $event) { parent::beforeFilter($event); $this->Auth->allow(['add', 'activate']); }
Authã³ã³ãã¼ãã³ãã®å ¬å¼åèè³æ
æå¾ã«ãAuthã³ã³ãã¼ãã³ãã使ãããã§ãåèã«ãªãè¨äºãè¨è¼ãã¦ããã¾ãã
â¼Authã³ã³ãã¼ãã³ãã使ã£ã¦èªè¨¼æ©è½ãå®è£ ããå ¬å¼ã®ãã¥ã¼ããªã¢ã«ã§ãã
â¼Authã³ã³ãã¼ãã³ãã®ä»æ§ãæ´çãããå ¬å¼ææ¸ã§ãã
è²´ä¸ã®å¾é ãªãä¸åãæ¾å´ãã