Laravel 5.4错误登录总是得到'这些凭据与我们的记录不匹配'

时间:2017-04-29 08:33:24

标签: laravel laravel-5 laravel-5.4

我创建了一个带有验证邮件的登录信息,可以在Laravel 5.4上正常使用。

当我使用正确的'电子邮件','密码'并且'激活' (这意味着用户批准了他的电子邮件),我可以成功登录。 我的问题是,当我尝试使用未激活的用户,错误的电子邮件或登录进行登录时,我将始终得到相同的错误。

Illuminate\Support\ViewErrorBag Object ( [bags:protected] => Array ( [default] => Illuminate\Support\MessageBag Object ( [messages:protected] => Array ( [email] => Array ( [0] => These credentials do not match our records. ) ) [format:protected] => :message

如何通过错误的登录信息获得更多意义?

P.S。

我没有提供用户方案,因为正确的数据会接受登录。

1 个答案:

答案 0 :(得分:3)

由于LoginController使用AuthenticateUsers特征,您可以覆盖例如sendFailedLoginResponse,以验证确切原因。

而不是:

protected function sendFailedLoginResponse(Request $request)
{
    $errors = [$this->username() => trans('auth.failed')];

    if ($request->expectsJson()) {
        return response()->json($errors, 422);
    }

    return redirect()->back()
        ->withInput($request->only($this->username(), 'remember'))
        ->withErrors($errors);
}

你可以在LoginController

中写下这样的内容
protected function sendFailedLoginResponse(Request $request)
{
    $user = User::where($this->username(), $request->input('email'))->first();

    if ($user && !$user->activated) {
        $errorMessage = 'You need to activate your account first'; // you can use trans here too
    }
    else {
        $errorMessage = trans('auth.failed');
    }

    $errors = [$this->username() => $errorMessage];

    if ($request->expectsJson()) {
        return response()->json($errors, 422);
    }

    return redirect()->back()
        ->withInput($request->only($this->username(), 'remember'))
        ->withErrors($errors);
}

上面可能是最简单的方法(但是一些额外的查询将运行到数据库中)。