laravel - 如何在 Laravel 登录中检查附加条件?
问题描述
我是自学 Laravel。我正在尝试使用自定义消息为 laravel 登录添加更多条件,但永远不会引发错误!。我正在尝试检查用户是否未锁定以及是否验证了电子邮件。这是我在 LoginController 中的代码:
protected function attemptLogin(Request $request)
{
$valid = $this->guard()->attempt(
$this->credentials($request), $request->filled('remember')
); // this will return true or false.
if ($valid) { //if credentials are valid, check additional conditions.
$user = $this->guard()->user();
if ($user->email_verified_at == null || $user->locked == true) {
$valid = false;
return $valid;
} else {
$this->createUserFolder(); // if the login is successfull.
$valid = true;
return $valid;
}
}
$valid = false;
return $valid;
}
protected function sendFailedLoginResponse(Request $request)//this will get triggered if the method above (attemptLogin(Request $request)) returns false.
{
$credentials = [
'email' => $request['email'],
'password' => $request['password'],
];
$valid= Auth::attempt($credentials);
if ($valid== false) { //if user credentials are incorrect
$errors = [$this->username() => trans('auth.failed')];
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors($errors);
} else { // //if user credentials are correct
$user = User::where('email', $request->input('email'))->first();
if ($user->locked == '1') {
throw ValidationException::withMessages([
$this->username() => [trans('auth.locked')],
])->redirectTo('login');
} else {
throw ValidationException::withMessages([
$this->username() => [trans('auth.notactivated')],
])->redirectTo('login');
}
}
}
public function logout(Request $request)
{
Auth::logout();
\Artisan::call('cache:clear');
$this->guard()->logout();
\Session::flush();
return redirect(\URL::previous());
}
是否可以将 sendFailedLoginResponse 用于上述多个条件?我的代码有什么问题?感谢帮助。
解决方案
I find the answer as below:
protected function sendFailedLoginResponse(Request $request)//this will get triggered if the method above (attemptLogin(Request $request)) returns false.
{
$credentials = [
'email' => $request['email'],
'password' => $request['password'],
];
$valid = Auth::attempt($credentials);
if ($valid == false) { //if user credentials are incorrect
$errors = [$this->username() => trans('auth.failed')];
Auth::logout();
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors($errors);
} else { // //if user credentials are correct check additional conditions
$user = User::where('email', $request->input('email'))->first();`enter code here`
if ($user->locked == 1) {
$errors = [$this->username() => trans('auth.locked')];
Auth::logout();
throw ValidationException::withMessages([
$this->username() => [trans('auth.locked')],
]);
} else {
$errors = [$this->username() => trans('auth.notactivated')];
Auth::logout();
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors($errors);
}
}
}
推荐阅读
- wxpython - 使用 wxpython 的 wx.grid 时如何避免错误“必须删除任何推送的事件处理程序”
- go - 在 TravisCI 中的 Go 中创建带有扩展名的临时文件
- django-testing - 如何在不同域中使用 StaticLiveServerTestCase?
- unity3d - Unity3D UI 按钮需要多次单击才能播放或暂停音频
- javascript - 如何在已部署的 Heroku 节点应用程序上获取基本 url 变量
- c# - BotDetect Captcha 问题:回发时初始化新会话
- r - 如何通过R中的条件创建与他人相关的新列?
- javascript - 如何从javascript文件运行python脚本?
- angular - mat-autocomplete 始终显示与 Akita 相同的名称
- php - 在 Laravel 5.6 多关系设置中添加逻辑的位置