在我的用户模型中,我有一个状态字段。我只想允许状态为“active”的用户登录。我想在AppServiceProvider中创建一个自定义Validator,但不确定在用户登录时在哪里使用它。
我可以从AuthenticatesUsers()特性覆盖login()或validateLogin()吗?
任何帮助表示赞赏!
答案 0 :(得分:3)
在我所看到的特性(you can see it here)的源代码中:
$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']
或您需要的任何价值:)
希望它有所帮助!
答案 1 :(得分:1)
如果您愿意,可以覆盖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
}