Tur*_*per 0 authentication laravel laravel-ui
我使用 laravel ui auth 包进行登录。但我想为用户添加新的登录条件,除了电子邮件和密码(isBanned 布尔值)。但是,我不知道在哪里和文件可供我编辑以添加新条件。
你应该有一个app/Http/Controllers/Auth名为 name的控制器LoginController。这个控制器使用了一个特质AuthenticatesUsers。您想要做的是调整传递给attempt正在发生的事件的凭据。credentials这可以通过重写以下方法来完成LoginController:
use Illuminate\Http\Request;
...
protected function credentials(Request $request)
{
return $request->only($this->username(), 'password') + [
'isBanned' => false
];
}
Run Code Online (Sandbox Code Playgroud)
这将添加isBanned到凭据中,这些凭据都是查找用户的查询中的“where”条件(“密码”字段除外)。
如果您希望能够知道用户是否有错误的凭据或者他们是否被禁止,那么您不需要重写该credentials方法,您只需重写该attemptLogin方法和sendFailedLoginResponse以下方法即可LoginController:
protected function attemptLogin(Request $request)
{
return $this->guard()->attemptWhen(
$this->credentials($request),
fn ($user) => ! $user->isBanned,
$request->filled('remember')
)
}
protected function sendFailedLoginResponse(Request $request)
{
$user = $this->guard()->getLastAttempted();
throw ValidationException::withMessages([
$this->username() => [
$user && $this->guard()->getProvider()->validateCredentials($user, $this->credentials($request))
? 'You are banned'
: trans('auth.failed')
]
]);
}
Run Code Online (Sandbox Code Playgroud)
我们不会调整凭据,因此我们让用户提供商根据用户的凭据(用户名/电子邮件和密码)获取用户。通过调用,attemptWhen我们可以添加一个回调条件,以查看在通过凭据检索用户并验证用户后是否要让他们登录。我们创建一个回调来检查用户是否被禁止。在中,sendFailedLoginResponse我们正在检查警卫是否有一lastAttempted组(用户提供者是否根据凭据检索用户)。如果它确实有用户并且凭据有效,那么他们必须被禁止,否则他们将被登录。所有其他情况我们都会返回身份验证失败消息。
| 归档时间: |
|
| 查看次数: |
2016 次 |
| 最近记录: |