php cakephp authentication login cakephp-3.0

Iniciar sesión[Auth-> identify()] siempre falso en CakePHP 3



authentication login (4)

CakePHP3 utiliza un algoritmo de hashing diferente de forma predeterminada que 2 (bcrypt vs. SHA1), por lo que debe alargar la duración de su contraseña. Cambie su campo de contraseña a VARCHAR (255) para estar seguro.

Cuando CakePHP 3 intenta identificar su contraseña hash en memoria desde este-> Auth-> identify () frente a la contraseña hash en la base de datos, nunca coincidirá porque faltan algunos caracteres. Cambiar a 255 es más de lo necesario, pero puede ayudar a futuras pruebas si se usa un hash aún más seguro en el futuro. 255 se recomienda porque el recuento de caracteres se puede almacenar en un byte.

Empecé a usar CakePHP 3 después de un tiempo usando CakePHP 2 y tengo problemas para crear el inicio de sesión de autenticación.

La nueva función de autenticación $this->Auth->identify() siempre devuelve falso.

En la base de datos, la contraseña está encriptada perfecta y la consulta que lleva al usuario está bien también.

Mi código:

AppController:

[...] class AppController extends Controller{ public function initialize(){ $this->loadComponent(''Flash''); $this->loadComponent(''Auth'', [ ''loginRedirect'' => [ ''controller'' => ''Admin'', ''action'' => ''index'' ], ''logoutRedirect'' => [ ''controller'' => ''Pages'', ''action'' => ''display'' ] ]); } public function beforeFilter(Event $event) { $this->Auth->allow([''display'']); } }

UserController:

[...] class UsersController extends AppController{ public function beforeFilter(Event $event) { parent::beforeFilter($event); $this->Auth->allow([''logout'']); } [...] public function login() { if ($this->request->is(''post'')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); return $this->redirect($this->Auth->redirectUrl()); } $this->Flash->error(__(''Invalid username or password, try again'')); } } [...]

Usuario (entidad modelo):

<?php namespace App/Model/Entity; use Cake/Auth/DefaultPasswordHasher; use Cake/ORM/Entity; class User extends Entity{ protected $_accessible = [*]; protected function _setPassword($password){ return (new DefaultPasswordHasher)->hash($password); } }

Ver:

<div class="users form"> <?= $this->Flash->render(''auth'') ?> <?= $this->Form->create() ?> <fieldset> <legend><?= __(''Please enter your username and password'') ?></legend> <?= $this->Form->input(''username'') ?> <?= $this->Form->input(''password'') ?> </fieldset> <?= $this->Form->button(__(''Login'')); ?> <?= $this->Form->end() ?> </div>


Resuelto: el tipo en la base de datos era menos de lo requerido. Cambiado a varchar (255) y ahora funciona bien :)


Tuve el mismo problema. El inicio de sesión [Auth-> identify ()] no funcionaba para mí. Cambiar la longitud de la contraseña en db resolverá el problema.


Hola, comparto mis fragmentos de autenticación de inicio de sesión, todas las pruebas están correctas, en CakePHP 3.1, aduanas (Table + view login BootStrap 3 + SQL base + bootstrap.php personalizado para español en Inflector :: rules (*******))

Todo el código en

https://bitbucket.org/snippets/eom/rLo49