Laravel 5.2

时间:2016-05-27 10:30:41

标签: php laravel-5.2

在我的用户模型中,我有一个状态字段。我只想允许状态为“active”的用户登录。我想在AppServiceProvider中创建一个自定义Validator,但不确定在用户登录时在哪里使用它。

我可以从AuthenticatesUsers()特性覆盖login()或validateLogin()吗?

任何帮助表示赞赏!

2 个答案:

答案 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
}