Laravel Auth:使用电子邮件或用户名登录(在一个字段中)

Where business professionals discuss big database and data management.
Post Reply
sakib40
Posts: 632
Joined: Sat Dec 21, 2024 3:17 am

Laravel Auth:使用电子邮件或用户名登录(在一个字段中)

Post by sakib40 »

给你们一些快速提示。如果在我们的项目中,用户不仅可以通过电子邮件登录,还可以通过其他一些字段(如“用户名”或“user_id”等)登录,该怎么办?默认情况下,Laravel 只允许一个字段,如“电子邮件”。事实上改变起来很容易。

想象一下,我们的用户表中已经有一个用户名字段,并且需要检查登录表单的结果。因此只有两个输入字段——登录名和密码。登录名可以是电子邮件或用户名。我们怎样才能检查两者?


公共函数登录(请求$request)
{
$this->validate($request, [
'登录' => '必填',
'密码' => '必填',
]);

$login_type = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL )
? '电子邮件'
:'用户名';

$请求->合并([
$login_type => $request->input('登录')
]);

如果(Auth::attempt($request->only($login_type,'密码'))){
返回重定向()->预期($this->redirectPath());
}

返回重定向()->返回()
->withInput()
->withErrors([
'login' => '这些凭证与我们的记录不匹配。',
]);
}

}
让我们更深入地看一下:

$login_type = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL )
? '电子邮件'
:'用户名';
这行代码检查用户是否输入了电子邮件或其他 喀麦隆电报号码数据 字符串 - 然后将其解释为用户名。

$请求->合并([
$login_type => $request->input('登录')
]);
这个向 $request数组添加了一个变量 - 默认情况下我们有“登录”变量,但我们真正需要的是“电子邮件”或“用户名” - 所以就在这里。

如果(Auth::attempt($request->only($login_type,'密码'))){
返回重定向()->预期($this->redirectPath());
}
最后,我们检查凭证,但只检查我们需要的凭证——它们来自 $login_type变量 。
Post Reply