2016-11-02 36 views
0

我知道這裏有一些類似的問題,但我沒有找到解決我的問題的答案。我的問題是身份驗證始終是錯誤的。這是我的代碼:CakePHP3登錄認證管理員端總是虛假

我AdminController

class AdminController extends AppController 
{ 
    public function initialize() 
    { 
    parent::initialize(); 
    $this->loadComponent('Auth', [ 
     'authenticate' => [ 
      'Form' => [ 
       'userModel' => 'Admins', 
       'fields' => [ 
        'username' => 'email', 
        'password' => 'password' 
       ] 
      ] 
     ], 
     'loginAction' => [ 
      'controller' => 'Innerlogin', 
     ] 
    ]); 
    } 
} 

InnerloginController:

namespace App\Controller\Admin; 

use App\Controller\AdminController; 
use Cake\Event\Event; 

class InnerloginController extends AdminController 
{ 
    public function index() 
    { 
    $this->loadModel('Admins'); 

    if($this->request->is('POST')) 
    { 
     $admin = $this->Auth->identify(); 

     if($admin) 
     { 
      $this->Auth->setUser($admin); 
      return $this->redirect([ 'controller' => 'admin' ]); 
     } 
     else 
     { 
      $this->Flash->error('Incorrect username or password'); 
     } 
    } 

    } 

} 

實體/聯繫

namespace App\Model\Entity; 

use Cake\Auth\DefaultPasswordHasher; 
use Cake\ORM\Entity; 


class Admin extends Entity 
{ 

    protected $_accessible = [ 
     '*' => true, 
     'admins_id' => false 
    ]; 

    protected function _setPassword($password) 
    { 
     return(new DefaultPasswordHasher())->hash($password); 
    } 
} 

Innerlogin/index.ctp

<?= $this->Form->create() ?> 
    <?= $this->Form->input('username', ['label' => false, 'class' => 'input-cst' ]) ?> 
    <?= $this->Form->input('password', ['label' => false, 'class' => 'input-cst', 'type' => 'password' ]) ?> 
    <?= $this->Form->button(__('Login'), ['class' => 'btn btn-success right']) ?> 
<?= $this->Form->end() ?> 

我的管理員表

Field  Type   Null Key Default Extra 
admins_id int(11)  NO PRI NULL auto_increment 
name  varchar(40) NO  NULL  
email  varchar(50) NO  NULL  
password varchar(255) NO  NULL  
sex   varchar(1) NO  NULL  
birthday varchar(40) NO  NULL  
created  varchar(40) NO  NULL  
deleted  varchar(40) NO  0 

任何想法,我做錯了什麼? 順便說一下,我有另一個相關的問題。我想做兩個身份驗證,一個用於管理員的另一個用戶(我不想將角色列保留在一個表中,並檢查用戶或管理員)。我可以那樣做嗎?它會正常工作?

+0

不要請一次詢問多個問題,而不是打開一個新問題,在那裏你可以詳細解釋你的問題 - 謝謝! – ndm

回答

0

fields選項不是「數據庫列輸入字段」映射,它用於配置要使用的字段/列而不是

您已配置表單認證使用email場/列,而不是username場/列,所以你必須相應地改變你的形式使用email也即

<?= $this->Form->input('email', ['label' => false, 'class' => 'input-cst' ]) ?> 
+0

謝謝,幫助我:) – user3819713