Php Laravel 5.2中的自定义登录验证
在我的用户模型中,我有一个状态字段。我只想允许状态为“活动”的用户登录。我想在AppServiceProvider中创建一个自定义验证器,但不确定用户登录时在何处使用它 我可以从authenticateUsers()特性覆盖login()或validateLogin()吗Php Laravel 5.2中的自定义登录验证,php,laravel-5.2,Php,Laravel 5.2,在我的用户模型中,我有一个状态字段。我只想允许状态为“活动”的用户登录。我想在AppServiceProvider中创建一个自定义验证器,但不确定用户登录时在何处使用它 我可以从authenticateUsers()特性覆盖login()或validateLogin()吗 感谢您的帮助 在trait()的源代码中,我看到: $credentials = $this->getCredentials($request); if (Auth::guard($this->g
感谢您的帮助 在trait()的源代码中,我看到:
$credentials = $this->getCredentials($request);
if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
return $this->handleUserWasAuthenticated($request, $throttles);
}
您可以将凭据数组传递给尝试方法
所以,您所需要做的就是传递一个固定值和其余的请求数据
举个例子,如果在这一刻你经过一个
['email' => 'my@email.com', 'password' => 'my-password']
你现在需要通过考试
['email' => 'my@email.com', 'password' => 'my-password', 'status' => 'active']
或者您需要的任何值:)
希望有帮助 如果愿意,您可以覆盖AuthController中的
getCredentials
,不必对该大型login
方法进行任何调整
protected function getCredentials(Request $request)
{
return $request->only($this->loginUsername(), 'password') + ['status' => 'active'];
// return an array with all the default credentials and adding 'status'
}
要调整验证,您可以覆盖validateLogin
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->loginUsername() => 'required', 'password' => 'required',
]);
// adjust as needed
}
谢谢你的快速回复!我有点搞不清楚该把数组放在哪里。我使用artisan命令构建所有身份验证路由/控制器。我只能在Auth控制器中看到create()和validate(),但这只与注册用户有关?您可以在类中重写所需的方法。。。在本例中,
login
,因为您的实现将具有(参见示例3)是的,谢谢。在和一位同事交谈后,我也做了类似的事情。我向控制器添加了validateLogin
,并向用户名添加了自定义验证器。因此,我最终得到了$this->loginUsername()=>“required | active”
。然后在AppServiceProvider
中删除了我的自定义验证器。谢谢您的帮助。@Shuda如果您觉得答案令人满意,请标记:)谢谢