こんにちは。またもやcakePHPにハマっています。。。
現在管理者用の仕組みを作ろうとしており
リンク内容
とドキュメント
リンク内容
を読みながら進めています。
また似たエラーの方々が多いようなので調べてみたのですが、同じ条件ではない(データベースの長さが足りないや、ハッシュ化ができていない)のようなものでばかりです。
望んでいる動作は、ログインができるようにしたい。
というシンプルなものです。初心者すぎて原因が追求できず困り果てています・・・。
以下汚いコードですが,
見た感じおかしい所にお気付きになりましたらお教えいただけると幸いです。
よろしくお願いします。
※上から
cakephpから見たSQL
sqlを直接見たとき
AppController.php
Admin.php
AdminsController.php
AppController.php
php
1 2<?php 3 4namespace App\Controller\Admin; 5 6use Cake\Controller\Controller; 7use Cake\Event\Event; 8 9class AppController extends Controller 10{ 11 12 13 public function initialize() 14 { 15 parent::initialize(); 16 17 $this->loadComponent('RequestHandler', [ 18 ]); 19 $this->loadComponent('Flash'); 20 21 $this->loadComponent('Auth',[ 22 'authenticate'=> 23 ['Form' =>['userModel' => 'Admin', 24 'fields' => ['username'=>'admin_name','password'=>'admin_pass'], 25 'finder'=>'auth'] 26 ], 27 'loginAction'=>['controller'=>'Admins','action'=>'login'], 28 'loginRedirect'=>['controller'=>'Admins','action'=>'home'], 29 'logoutRedirect'=>['controller'=>'Admins','action'=>'home'], 30 'storage'=>['className'=>'Session','key'=>'Auth.Admin'] 31 ] 32 ); 33 } 34} 35
Admin.php
php
1 2<?php 3namespace App\Model\Entity; 4 5use Cake\ORM\Entity; 6use Cake\Auth\DefaultPasswordHasher; 7 8class Admin extends Entity 9{ 10 protected $_accessible = [ 11 'admin_name' => true, 12 'admin_pass' => true, 13 'role' => true, 14 'delete_flg' => true, 15 'created' => true, 16 'modified' => true 17 ]; 18 19 public function findAuth(\Cake\ORM\Query $query,array $options){ 20 $query 21 ->select(['admin_name','admin_pass','role']) 22 ->where(['Admin.delete_flg'=>0]); 23 24 return $query; 25 } 26 27 protected function _setAdminPass($value){ 28 if(strlen($value)){ 29 return (new DefaultPasswordHasher)->hash($value); 30 } 31 } 32}
AdminsController.php
php
1 2 3 4 public function beforeFilter(\Cake\Event\Event $event) 5 { 6 parent::beforeFilter($event); 7 $this->Auth->allow('index'); 8 } 9 10 public function login(){ 11 12 if($this->request->is('post')){ 13 $admin = $this->Auth->identify(); 14 debugger::dump($admin); 15 if($admin){ 16 $this->Auth->setUser($admin); 17 return $this->redirect($this->Auth->redirectUrl()); 18 } 19 $this->Flash->error('ユーザー名またはパスワードが不一致です。ログインし直してください。'); 20 } 21 } 22 23 public function home(){ 24 25 }
変化(10/7)
ハッシュ化が上手くいっていないのかな?と思ったので、'toyota'をハッシュ化させて比較させてみたところ、一致するようです。(やり方はネットから拝借)
identifyがfalseしか返さない理由がますますわからなくなりました。。。
php
1 $hasher = new DefaultPasswordHasher(); 2 if($hasher->check('toyota','$2y$10$eKJY.uLSJDTuqnKplX0Cfe0uULaBBZVkJoQ2MrhUJLga6WRJOlnwu')){ 3 var_dump('一致'); 4 }else{ 5 var_dump('不一致'); 6 } 7 die;
環境
mac
mysql
cakephp3.8
php7.3.1
回答3件
あなたの回答
tips
プレビュー