2016-11-02 2 views
0

Я знаю, что у меня есть несколько похожих вопросов, но я не нахожу ответ, который разрешил мою проблему. Моя проблема - аутентификация всегда ложна. Это мой код:CakePHP3 login auth для администратора всегда всегда false

Мой 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'); 
     } 
    } 

    } 

} 

Entity/Admin

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

Смежные вопросы