我正在完成我的工作,但我的客户需要更多关于管理用户的功能,例如暂停帐户或冻结帐户,我非常确定可以通过以下方式轻松完成:{ {3}},但我已经使用默认的php artisan make:auth
身份验证。我的问题是,在用户登录时可以添加更多检查,如if active == true
或类似的东西?谢谢!
答案 0 :(得分:2)
你可以自己覆盖现有的登录功能:
public function postLogin(Request $request)
{
$this->validate($request, [
'email' => 'required|email', 'password' => 'required',
]);
$credentials = $this->getCredentials($request);
// This section is the only change
if (Auth::validate($credentials)) {
$user = Auth::getLastAttempted();
if ($user->active) {
Auth::login($user, $request->has('remember'));
return redirect()->intended($this->redirectPath());
} else {
return redirect($this->loginPath()) // Change this to redirect elsewhere
->withInput($request->only('email', 'remember'))
->withErrors([
'active' => 'You must be active to login.'
]);
}
}
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors([
'email' => $this->getFailedLoginMessage(),
]);
}
您也可以根据需要进行修改。
由于
答案 1 :(得分:2)
在laravel 5.4中,您可以使用authenticated
的{{1}}帖子登录挂钩进行自定义验证。
AuthenticatesUsers
答案 2 :(得分:2)
将此功能放入LoginController
public function postLogin(Request $request)
{
$credentials = $request->only('email', 'password');
$user=User::whereEmail($credentials['email'] )->first();
if (!empty($user) && $user->active) {
if (Auth::attempt($credentials)) {
return redirect()->intended($this->redirectPath());
} else {
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors(['email' => $this->getFailedLoginMessage()]
);
}
} else {
return redirect($this->loginPath())
->withInput($request->only('email', 'remember'))
->withErrors(['email' => $this->getFailedLoginMessage()]
);
}
}
public function loginPath()
{
return property_exists($this, 'loginTo') ? $this->redirectTo : '/login';
}
protected function getFailedLoginMessage()
{
return Lang::has('auth.failed')
? Lang::get('auth.failed')
: 'set here your custom message.';
}