我创建了一个带有验证邮件的登录信息,可以在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。
我没有提供用户方案,因为正确的数据会接受登录。
答案 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);
}
上面可能是最简单的方法(但是一些额外的查询将运行到数据库中)。