Laravel 4 Auth::tentative() renvoie toujours false
Je suis en train de la Laravel est Auth classe, mais à chaque fois que je tente de me connecter à un utilisateur, la méthode renvoie false. Voici mon code:
Routes.php
Route::get('new-user', function() {
return View::make('register');
});
Route::post('new-user', function() {
$name = Input::get('name');
$email = Input::get('email');
$password = Hash::make(Input::get('password'));
$user = new User;
$user->name = $name;
$user->email = $email;
$user->password = $password;
$user->save();
});
Route::get('login', function() {
return View::make('login');
});
Route::post('login', function() {
$user = array(
'email' => Input::get('email'),
'password' => Hash::make(Input::get('password'))
);
if (Auth::attempt($user)) {
//return Redirect::intended('dashboard');
return "ok.";
} else {
return "Wrong.";
}
});
views/login.blade.php
{{ Form::open(array('url' => 'login', 'method' => 'post')) }}
<h1>Login:</h1>
<p>
{{ Form::label('email', 'Email: ') }}
{{ Form::text('email') }}<br />
{{ Form::label('password', 'Password: ') }}
{{ Form::password('password') }}<br />
</p>
<p>
{{ Form::submit('Login') }}
</p>
{{ Form::close() }}
config/auth.php
return array(
'driver' => 'eloquent',
'model' => 'User',
'table' => 'users',
'reminder' => array(
'email' => 'emails.auth.reminder', 'table' => 'password_reminders',
),
);
La base de données a l'e-mail & champs de mot de passe, et le champ mot de passe est de type varchar(60).
Chaque fois que j'envoie les informations de login /login il me renvoie "Mal".
Je ne peux vraiment pas voir ce qui cloche ici?
OriginalL'auteur John | 2013-06-14
Vous devez vous connecter pour publier un commentaire.
Votre code est en écoute parce que vous êtes de passage le mauvais variables à
Auth::attempt()
. Cette méthode nécessite un tableau avec les clés nom d'utilisateur, mot de passe et éventuellement rappeler. Dans cette lumière, votre code ci-dessus devrait être:Espère que ça aide.
Aussi je vais vous donner des extraits de code supplémentaire pour améliorer votre flux de travail. Route pour stocker de nouvelles de l'utilisateur:
Ensuite dans votre modèle utilisateur, ajouter la méthode
De cette façon, le mot de passe sera automatiquement haché chaque fois que c'est mis en
OriginalL'auteur Neo Ighodaro
Ne pas hacher le mot de passe avant de tenter:
Selon la documentation (four.laravel.com/docs/security#storing-passwords) les mots de passe sont transmis unhashed à une tentative(). Je suis sûr que c'était un problème, mais vous pourriez avoir plus d'un. Assurez-vous que le mot de passe est stocké correctement dans votre table des utilisateurs.
Voici comment j'ai stocker les utilisateurs dans la base de données:
Route::post('new-user', function() { $name = Input::get('name'); $email = Input::get('email'); $password = Hash::make(Input::get('password')); $user = new User; $user->name = $name; $user->email = $email; $user->password = $password; $user->save(); });
désolé, je ne sais comment faire pour afficher le code correctement ici.Oui, Antonio est correct. Lorsque vous créez le compte de l'utilisateur, vous devez hacher le mot de passe avant de l'enregistrer. Lorsque vous utilisez Auth::tentative, utiliser 'password' => Input::get('mot de passe'). Laravel permettra de hachage et de comparer hachage de mot de passe entrés de hachage des mots de passe. Toute autre combinaison de haché/unhashed échouera.
OriginalL'auteur Antonio Carlos Ribeiro
cela ne fonctionnera pas car auth::tentative convertit le mot de passe de hachage à l'aide de bcrypt, et regarde pour ce symbole dans la table des utilisateurs de match.
en bref, le mot de passe doit être un hash stocké dans la table de base de données pour l'auth::tentative de travail.
c'est pourquoi votre si() condition de défaut.
vous pouvez utiliser bcrypt(mot de passe) pour stocker le mot de passe de hachage dans la base de données et ensuite utiliser auth::tentative
ci-dessous est de laravel docs
https://laravel.com/docs/5.2/authentication#authenticating-users
OriginalL'auteur Laravel User
Vous devez mettre en œuvre
UserInterface
classe fournie par laravel au sein de votre classe de modèle:Et rappelez-vous qu'il dispose de 2 méthodes abstraites que vous devez déclarer à votre modèle. Vous pouvez suivre origine
User.php
modèleOriginalL'auteur revo
Vérifier votre Longueur de mot de passe. Il doit être de 60 ou plus dans la base de données.
OriginalL'auteur Khalil Laleh