Login [ Auth->identifier() ] toujours faux sur CakePHP 3
J'ai commencé à utiliser CakePHP 3 après un certain temps en utilisant CakePHP 2 et je vais avoir des ennuis pour créer la connexion de l'authentification.
La nouvelle auth fonction $this->Auth->identify()
retourne toujours false.
Sur la base de données, le mot de passe sont cryptés parfait et la requête qui prend l'utilisateur, il est aussi ok.
Mon code:
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'));
}
}
[...]
Utilisateur (Modèle Entité):
<?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);
}
}
Vue:
<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>
Quelle est la longueur de votre champ de mot de passe?
Il est de type VARCHAR(255)
A 45.... Changé à 255 et qui travaille aujourd'hui =) Merci =D
Pouvez-vous écrire au sujet de votre solution dans la zone réponse fournie? C'est préférable à l'édition le mot "résolu" dans la question.
Il est de type VARCHAR(255)
A 45.... Changé à 255 et qui travaille aujourd'hui =) Merci =D
Pouvez-vous écrire au sujet de votre solution dans la zone réponse fournie? C'est préférable à l'édition le mot "résolu" dans la question.
OriginalL'auteur Beto | 2015-04-09
Vous devez vous connecter pour publier un commentaire.
CakePHP3 utilise un autre algorithme de hachage par défaut de 2 (bcrypt vs SHA1), alors vous avez besoin pour rendre votre mot de passe d'une longueur plus longue. Changer votre mot de passe champ de type VARCHAR(255) pour être sûr.
Quand CakePHP 3 tente d'identifier votre mémoire hachage de mot de passe à partir de ce->Auth->identifier() vs le hachage de mot de passe dans la base de données, il ne sera jamais de match parce que certains caractères sont manquants. Changer de 255 est plus que nécessaire, mais il peut aider à l'avenir si plus sûr de hachage est utilisé dans le futur. 255 est recommandé car le nombre de caractères peut être stocké dans un octet.
OriginalL'auteur cs01
Résolu: Le type sur la base de données a été de moins que prévu. Changé varchar(255) et maintenant fonctionne très bien 🙂
Je ne savais pas que c'était possible (en cliquant sur le vert v) ... j'ai mis à jour. Merci pour le conseil =)
COCHEZ CETTE! Cela a également été un problème pour moi, après qu'il est têtu et ne pas avoir vérifié.
OriginalL'auteur Beto
J'ai eu le même problème. Le Login [ Auth->identifier() ] n'a pas de travail pour moi. Changement de longueur de mot de passe dans la db va résoudre le problème.
J'ai aussi changé la longueur de pas de travail pour moi. face à un même problème
OriginalL'auteur Neeraj
Hi partager mes bouts de Connexion Auth, tous les Tests sont OK, dans CakePHP 3.1, les douanes (Table + vue login BootStrap 3 + base SQL + personnalisé bootstrap.php pour l'espagnol dans Inflector::règles(*******))
Tout le code dans
https://bitbucket.org/snippets/eom/rLo49
OriginalL'auteur Sergio