2016-05-12 18 views
1

に私はパスワードリセットフォームでの問題を抱えているlaravel 5.2Laravel 5認証:ヌル

に含まれる認証を使用しています)メンバ関数getEmailForPasswordReset(に呼び出します。

私は電子メールを送信すると、それはこのエラーを返します。

Call to a member function getEmailForPasswordReset() on null

私は、次のコードによって、この原因が見つかりました:

$user->getEmailForPasswordReset() 

$userは私がしようとし、また、null

です変更するIlluminate\Auth\Passwords\PasswordBroker機能で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); 
     } 
    }); 

は私が変更:コンパクト( 'トークン'、 'ユーザー') - > [ 'トークン' => $トークン、 'user2は' => $ユーザー]

そして$user->getEmailForPasswordReset() - >$user2->getEmailForPasswordReset()

をうまくいく!

私が間違ったことを理解するのに役立つことができますか?おかげさまで

答えて

0

問題は確かにlaravelファイルではないので、あなたが修正するよりも多くのものを壊す可能性があり、また作者の更新を行うと上書きされる可能性があるため、そこを見て、

パスワードリセットリンクを送信するユーザーが見つからないため、$ userはnullです。パスワードのリセット(送信)を実装しているコントローラを確認すると、より効果的です。 Laravelはかなり良い出発点が付属していますし、必要な場合を除き、あなたはそれをoverengineerべきではありません。https://laravel.com/docs/5.2/authentication#resetting-routing

だから、リセットのリンクを送信するための方法は、このようなものになります。あなたが関与のないオブジェクトがありません見たよう

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'); 
     } 
    } 

をあなたが処理するために。

+0

ありがとう@Tadas、私は問題が依然として$ユーザーがメールテンプレートに割り当てることができないと思う。 PasswordControllerのsendResetLinkEmail関数をオーバーライドして修正しました.Laravelコアを変更する必要はありません。 –