Laravel 5 使用 Attempt 方法使用用户名或电子邮件自定义登录

菲利克斯·马克西姆

在我的 Laravel 应用程序中,一开始我决定创建我自己的自定义登录控制器,而不是使用基础控制器。

public function postSignin(Request $request, AppMailer $mailer) {
    $this->validate($request, [
        'email' => 'required',
        'password' => 'required',
    ]);     

    if (!Auth::attempt($request->only(['email', 'password']), $request->has('remember'))) {
        return redirect()->back()->with('info', 'Could not sign you in with those details.');
    }

    if (Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password'), 'verified' => 0]))
    {
        $mailer->sendEmailConfirmationTo(Auth::user());
        Auth::logout();
        return redirect()->back()->with('info', 'Email verification required.');
    }

    Auth::user()->last_login = new DateTime();
    Auth::user()->save();       

    return redirect()->back()->with('info', 'You are now signed in.');
}   

现在我想编辑它,以便用户也可以使用他们的用户名登录,而不仅仅是他们的电子邮件,使用相同的字段。但是,尝试方法令人困惑。即使在我切换值之后,它似乎也希望收到一封电子邮件。

在这种情况下,Auth 文档也不是很有帮助。它要求我添加以下内容:

public function username()
{
    return 'username';
}

在登录控制器中,但显然这是默认设置。

肯尼斯周日

您可以使用“ FILTER_VALIDATE_EMAIL ”检查器。

$username = $request->get('username');
$password = $request->get('password');
$remember_me = $request->get('remember_me','1');

$field = filter_var($username,FILTER_VALIDATE_EMAIL)? 'email': 'username';

if(Auth::attempt([$field => $username,'password' => $password],$remember_me)){
    //Auth successful here
}

含义FILTER_VALIDATE_EMAIL会检查字符串是否为电子邮件格式。

我希望此示例代码对您有所帮助。

-ken

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用用户名或电子邮件地址登录Spring Boot Webflux

使用用户名或电子邮件地址登录

如何通过自定义用户名列使用Laravel Passport

在Laravel 5.4中允许使用用户名或电子邮件登录

使用自定义HTML在Laravel中发送电子邮件

在Asp.net mvc5中使用用户名代替电子邮件作为身份

Laravel 5-如何使用带有用户名的基本身份验证代替电子邮件?

Laravel-使用用户名,电子邮件或电话登录

确保既未使用电子邮件也未使用用户名

使用用户名或电子邮件登录流明护照

Firebase-如何仅使用用户名(不输入密码/电子邮件)实施登录?

Tomcat安全容器,允许使用用户名或电子邮件地址登录

laravel。让用户使用非唯一电子邮件登录

Laravel Passport:仅使用用户名登录,无需密码

有什么方法可以使用用户名或电子邮件登录Django管理界面?

Laravel使用电子邮件代替用户名登录

使用用户名或电子邮件使用codeigniter登录

使用用户名而不是电子邮件进行身份验证laravel 5.2

如何在laravel中使用用户名登录

使用用户名(不是电子邮件)登录 Firebase

如何使用 Laravel 发送自定义电子邮件通知?

使用电子邮件作为用户名字段的自定义用户模型的登录用户

ASP.NET Identity 注册新用户以使用用户名作为用户名而不是电子邮件,但仍不显示登录者

使用电子邮件或用户名登录 Fortify Laravel 8

Laravel 自定义登录:使用 MD5 hasing

如何创建登录但使用用户名或电子邮件和密码

在用户验证他的电子邮件后,如何使用 Laravel 8 + Fortify 自定义操作

使用节点使用用户名或电子邮件登录并做出反应

使用电子邮件而不是用户名登录