Laravel 5身份验证:在null上调用成员函数getEmailForPasswordReset()

时间:2016-05-12 08:29:01

标签: laravel authentication

我正在使用laravel 5.2中包含的身份验证

我在重置密码表单时遇到问题。

当我提交电子邮件时,它会返回以下错误:

  

在null

上调用成员函数getEmailForPasswordReset()

我通过以下代码找到了这个原因:

$user->getEmailForPasswordReset()

$usernull

此外,我尝试在功能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);
        }
    });

我改变:compact('token','user') - > ['token'=> $ token,'user2'=> $ user]

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

效果很好!

你可以帮我搞清楚我做错了什么吗? 感谢。

1 个答案:

答案 0 :(得分:0)

问题绝对不在laravel文件中,所以请停止查看并弄乱代码,因为你冒着比修复更多的东西的风险,并且一旦你进行作曲家更新它就会被覆盖。

$ user为null,因为系统找不到要向其发送密码重置链接的用户。看到你的控制器实现密码重置(提交)会更有帮助。 Laravel有一个非常好的起点,除非需要,否则你不应该过度使用它: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');
        }
    }

如您所见,您无需处理用户对象。