2017-01-19 2 views
0

Ich habe das folgende Problem. Ich erstelle einen Benutzer und ein Passwort mit einem Seeder. Der Benutzer wird ordnungsgemäß erstellt und das Kennwort wird in der Datenbank verschlüsselt gespeichert. Und ich kann mich einloggen. Wenn ich versuche, dieses Passwort zu ändern, bemerke ich, dass sich die Zeichenfolge für das Passwort in der Datenbank ändert (etwas anderes ist verschlüsselt), aber ich kann mich weder mit dem neuen noch mit dem alten Passwort einloggen.Laravel - kann nicht nach Update-Passwort einloggen

Ich habe dies im Modell:

public function setPasswordAttribute($password) 
{ 
    $this->attributes['password'] = Hash::make($password); 
} 

und in der Steuerung das neue Passwort setzen Ich habe diese

$user = AuthAction::$user; 
$user->password = $subscriberData['password']; 
$user->save(); 

Nur eine letzte Bemerkung, das Modell, das ich für die bin mit user heißt Subscriber, und wenn ich einen var_dump der Variablen $ user führe, kann ich sehen, dass es sich um eine Instanz des Modellteilnehmers handelt.

+0

Ist die Ausgabe von 'dd (AuthAction :: $ user);' auch ein Instanz der Klasse 'Subscriber'? –

+0

Ja, 'dd (AuthAction :: $ user)' ist eine Instanz der Subscriber-Klasse –

Antwort

1

Hashing ein Passwort Bcrypt in Laravel:

$password = Hash::make('yourpassword'); 

Dies wird ein Hash-Passwort erstellen. Sie können es in Ihrem Controller verwenden oder auch in einem Modell, zum Beispiel, wenn ein Benutzer ein Kennwort ein Formular übermittelt, um Ihren Controller mit POST-Methode verwenden, dann können Sie es Hash so etwas wie dies mit:

$password = Input::get('passwordformfield'); // password is form field 
$hashed = Hash::make($password); 

Hier $ hashed enthält das Hash-Passwort. Grundsätzlich werden Sie dies tun, wenn Sie einen neuen Benutzer erstellen/registrieren, also beispielsweise wenn ein Benutzer Details wie Name, E-Mail, Benutzername und Passwort usw. über ein Formular übermittelt, bevor Sie die Daten in die Datenbank einfügen Hasse das Passwort nach der Validierung der Daten. Weitere Informationen finden Sie in der Dokumentation.

Update:

$password = 'JohnDoe'; 
$hashedPassword = Hash::make($password); 
echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy 

Also werden geben Sie die $ hashedPassword in die Datenbank. Hoffe, es ist jetzt klar und wenn du immer noch verwirrt bist, dann schlage ich dir vor, einige Tutorials zu lesen, einige Screenshots auf laracasts.com und tutsplus.com anzuschauen und ein Buch über Laravel zu lesen, das ist ein kostenloses eBook, das du herunterladen kannst .

Update: Da OP will manuell Passwort verschlüsseln mit Laravel Hash ohne Klasse oder bilden, so ist dies eine Alternative Art und Weise unter Verwendung von Handwerker basteln aus Eingabeaufforderung:

Gehen Sie zu Ihrer Eingabeaufforderung/Terminal Navigieren Sie zu die Laravel-Installation (das Stammverzeichnis Ihres Projekts) Verwenden Sie CD und drücken Sie die Eingabetaste von der Eingabeaufforderung/Terminal Dann schreiben php artisan tinker und drücken Sie die Eingabetaste Dann schreibe echo Hash :: make ('somestring'); Sie erhalten ein Hash-Passwort auf der Konsole, kopieren es und tun dann, was Sie wollen. Update (Laravel 5.x):

// Also one can use bcrypt 
$password = bcrypt('JohnDoe'); 
0
$user = AuthAction::$user; 
$user->password = Hash::make($subscriberData['password']); 
$user->save(); 
0

Dies liegt daran, Ihre aktualisierte Passwort zweimal gehasht wurde.Eine über Ihre eloquent Mutator

und die andere durch ResetPasswordController.

protected function resetPassword($user, $password) 
{ 
    $user->forceFill([ 
     'password' => bcrypt($password),//problem is here, $password was already hashed by eloquent mutator 
     'remember_token' => str_random(60), 
    ])->save(); 

    $this->guard()->login($user); 
} 

Sie können dieses Problem lösen, indem das Überschreiben der Resetpassword Funktion in Ihrem ResetPasswordController wie so:

protected function resetPassword($user, $password) 
{ 
    $user->forceFill([ 
     'password' => $password, 
     'remember_token' => str_random(60), 
    ])->save(); 

    $this->guard()->login($user); 
} 
Verwandte Themen