2016-05-12 6 views
1

Ich verwende die Authentifizierung mit Laravel enthalten 5.2Laravel 5 Authentication: Aufruf an eine Elementfunktion getEmailForPasswordReset() auf null

I ein Problem bei Reset Passwort Form haben.

Wenn ich E-Mail einreichen, gibt es diesen Fehler:

Call to a member function getEmailForPasswordReset() on null

Ich fand diese Ursache durch den folgenden Code:

$user->getEmailForPasswordReset() 

die $user ist null

Außerdem versuche ich, zu ändern Illuminate\Auth\Passwords\PasswordBroker bei Funktion emailResetLink

return $this->mailer->send($view, compact('token', 'user'), function ($m) use ($user, $token, $callback) { 
     $m->to($user->getEmailForPasswordReset()); 

     if (! is_null($callback)) { 
      call_user_func($callback, $m, $user, $token); 
     } 
    }); 

ich ändern: compact ('token', 'user') -> [ 'token' => $ Token 'user2' => $ user]

Und $user->getEmailForPasswordReset() ->$user2->getEmailForPasswordReset()

Es läuft gut!

Können Sie mir helfen, herauszufinden, was ich falsch gemacht habe? Danke.

Antwort

0

Das Problem ist definitiv nicht in Laravel-Dateien, also hör auf, dort zu suchen und mit dem Code zu tun, weil du riskierst, mehr Sachen zu brechen, als du reparieren wirst und es auch überschrieben wird, sobald du Composer aktualisiere.

Der $ user ist null, da das System den Benutzer nicht finden kann, an den Sie einen Link zum Zurücksetzen des Kennworts senden möchten. Es wäre hilfreicher, Ihren Controller zu sehen, der das Zurücksetzen des Passworts implementiert (Einreichen). Laravel kommt mit einer recht guten Ausgangspunkt, und Sie sollten es nicht overengineer wenn nicht benötigt: https://laravel.com/docs/5.2/authentication#resetting-routing

So ist die Methode für Reset Links Senden so etwas wie dies aussehen würde:

public function postEmail(Request $request) 
    { 
     $this->validate($request, ['email' => 'required|email']); 

     $response = Password::sendResetLink($request->only('email'), function (Message $message) { 
      $message->subject($this->getEmailSubject()); 
     }); 

     switch ($response) { 
      case Password::RESET_LINK_SENT: 
       return redirect()->back()->with('message', 'Password reset link sent'); 

      case Password::INVALID_USER: 
       return redirect()->back()->with('message', 'User not found'); 
     } 
    } 

Wie Sie sehen, es gibt keine Benutzerobjekte beteiligt für Sie zu handhaben.

+0

Dank @Tadas, ich denke, das Problem ist immer noch der $ Benutzer kann nicht auf die Mail-Vorlage zuweisen. Ich habe es behoben, indem ich die Funktion sendResetLinkEmail in PasswordController überschreiben, und ich brauche keinen Laravel-Core zu ändern. –

Verwandte Themen