2015-02-22 4 views
1

Я новичок в CakePhp framework и следил за учебником блога. Все прошло гладко до части аутентификации.CakePhp 3.0 не может войти

Следующие две строки были проблемы:

<?= $this->Form->input('Usuario') ?> 
<?= $this->Form->input('Contraseña') ?> 

Правильные линии:

<?= $this->Form->input('username') ?> 
<?= $this->Form->input('password') ?> 

Это мой метод Войти с UsersControllers.php, отладочная линия всегда возвращает ложь.

public function login() 
    { 
     if ($this->request->is('post')) { 
      debug($this->Auth->identify()); 
      $user = $this->Auth->identify(); 
      if ($user) { 
       $this->Auth->setUser($user); 
       return $this->redirect($this->Auth->redirectUrl()); 
      } 
      $this->Flash->error(__('Usuario o contraseña inválida, intente nuevamente')); 
     } 
    } 

Это мой пользовательский класс я должен был изменить строку $ _accessible охраняемого = [ '*' => верно]; как показано в учебнике, иначе пользователи не будут сохранены.

class User extends Entity 
{ 
    // Make all fields mass assignable for now. 
    protected $_accessible = ['username' => true,'password'=>true,'role'=>true,'created'=>true,'modified'=>true]; 
    // ... 
    protected function _setPassword($password) 
    { 
     return (new DefaultPasswordHasher)->hash($password); 
    } 
    // ... 
} 

Это мой login.ctp

<div class="users form"> 
    <?= $this->Flash->render('auth') ?> 
    <?= $this->Form->create() ?> 
    <fieldset> 
     <legend><?= __('Ingrese su usuario y contraseña') ?></legend> 
     <?= $this->Form->input('Usuario') ?> 
     <?= $this->Form->input('Contraseña') ?> 
    </fieldset> 
    <?= $this->Form->button(__('Login')); ?> 
    <?= $this->Form->end() ?> 
</div> 

Это мои методы AppController.php:

public function initialize() 
{ 
    $this->loadComponent('Flash'); 
    $this->loadComponent('Auth', [ 
    'loginRedirect' => [ 
    'controller' => 'Expedientes', 
    'action' => 'index' 
    ], 
    'logoutRedirect' => [ 
    'controller' => 'Pages', 
    'action' => 'display', 
    'home' 
    ] 
    ]); 
} 

public function beforeFilter(Event $event) 
{ 
    $this->Auth->allow(['index', 'view']); 
} 

На данный момент я могу добавить пользователей, их пароли хэшируются, но я могу Войдите. Любая помощь будет принята с благодарностью. Спасибо заранее.

+0

Как долго вы занимаетесь паролем? – Salines

+0

Привет, пароль \t varchar (255) \t utf8_general_ci – sms

+1

Задайте себе вопрос: как должен механизм auth знать, что он должен использовать поле 'Usuario' для имени пользователя и' Contraseña' для пароля? Не говоря уже о том, что верхняя часть нарушает правила именования CakePHP! – ndm

ответ

0

Спасибо @ndm за ответ. Я перевел имя пользователя и пароль полей в следующих строках:

<?= $this->Form->input('Usuario') ?> 
<?= $this->Form->input('Contraseña') ?> 

Правильные линии являются:

<?= $this->Form->input('username') ?> 
<?= $this->Form->input('password ') ?> 
2

Кроме того, при установке конфигурации componenent Auth, вы можете установить, какие поля в вашей БД, служить имя пользователя и пароль

$this->Auth->config('authenticate', [ 
     'Form' => [ 
         'fields' => [ 
            'username'=>'email', 
            'password' => 'password' 
           ], 
         'userModel' => 'Users' 
        ] 
     ]);