这是我第一次尝试使用php框架,所以我决定使用Laravel 5。
但是我有一个问题:我想在登录时检查用户状态,因此只有enabled == 1
个用户才能登录。我检查了 AuthenticatesAndRegistersUsers.php ,并关注了 Guard.php 上的一些函数,但我无法理解它在哪里检查实际列,以及我应该在哪里检查专栏is_enabled
。
答案 0 :(得分:1)
有些人可能不同意我的意见,但我会制作自己的Auth Controller。默认的一个太模糊了。如果你想要,你可以删除带有php artisan fresh
的laravel附带的所有东西,这将删除Auth Controller和其他一些东西。
自己创建非常简单,登录方法看起来像这样:
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
$remember = $request->get('remember') == 'on' ? true : false;
if(\Auth::attempt($credentials, $remember)) {
$enabled = \Auth::user()->enabled;
if(!$enabled) {
\Auth::logout();
return redirect()->withMessage('User not enabled to login');
}
}
}
检查文档以了解其他身份验证功能:
http://laravel.com/docs/5.0/authentication
您还可以在尝试之前检查数据库中的用户:
$enabled = User::where('email', '=', $email)->first()->enabled;
if($enabled && \Auth::attempt($credentials, $remember)) {
... redirect to logged in page.
答案 1 :(得分:0)
根据this链接的引用,假设在登录期间是否需要检查批准的另一列,那么需要在loginController中添加以下功能
public function credentials(Request $request)
{
$credentials = $request->only($this->username(), 'password');
$credentials = array_add($credentials, 'approved', '1');
return $credentials;
}
答案 2 :(得分:0)
您可以在默认的LoginController中使用经过身份验证的方法。每当用户通过配置的身份验证保护时,就会调用此方法。
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
// custom logic
if ($user->isDisabled()) {
$logoutResponse = $this->logout($request);
if ($logoutResponse instanceof RedirectResponse) {
$logoutResponse->withErrors(__('users.Your account has been deactivated'));
}
return $logoutResponse;
}
// end custom logic
return null;
}
通过检查AuthenticatesUsers特征形式Laravel,可以很清楚地看到,此方法的返回值用于if语句中,因此当我们想要默认行为时,只返回null是可以的:
/**
* Send the response after the user was authenticated.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
if ($response = $this->authenticated($request, $this->guard()->user())) {
return $response;
}
return $request->wantsJson()
? new Response('', 204)
: redirect()->intended($this->redirectPath());
}