菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2928
0

如何把 Laravel 默认邮箱登录改成用户名登录

原创
05/13 14:22
阅读数 2527

Laravel中默认的登录是通过邮箱和密码进行登录的。那么,怎么样才能用最少的改动将它改成用密码登录呢?

默认的,Laravel使用的是Illuminate\Foundation\Auth\AuthenticatesUsers这个trait完成登录功能的。通过观察AuthenticatesUsers的代码,发现下面一段很有意思的代码:

    protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => 'required|string',
            'password' => 'required|string',
        ]);
    }
    public function username()
    {
        return 'email';
    }

可以看到,是应为trait里定义了用户名就是email,所以才会使得验证的时候通过用户邮箱验证。所以我们只需要定义一个trait,覆盖AuthenticatesUsers中的username()方法即可实现后端代码通过用户名验证登录。

新增的trait代码

namespace App\Utils;

use Illuminate\Foundation\Auth\AuthenticatesUsers as LaravelAuthenticatesUsers;
trait AuthenticatesUsers {
    use LaravelAuthenticatesUsers;
    public function username()
    {
        return 'name';
    }
}

其实还有另一个简单的修改方式,直接在LoginController中新增username()方法。由于当前定义方法会覆盖trait的方法,因此也能达到修改的目的。但是会破坏登录代码的整体一致性,所以最好还是通过新增trait的方式实现。

同时要记得修改前端blade文件中对输入参数的验证,然后就可以使用用户名登录了

如何把Laravel默认邮箱登录改成用户名登录

文章有【写PHP的老王】发布,喜欢的可以关注公众号【写PHP的老王】

发表评论

0/200
2928 点赞
0 评论
收藏
为你推荐 换一批