Laravel9自定义用户表认证:缺失LoginController如何修改登录字段?
Laravel 9 自定义认证字段(login_id替代name)解决方案
问题背景
需要在Laravel 9中基于自定义用户表实现认证,使用login_id字段替代默认的name字段完成用户认证。在Laravel 8中可通过LoginController.php的username()方法修改认证字段,但Laravel 9的app\Http\Controllers\Auth目录下无LoginController.php,且添加name字段后认证可正常工作。
解答内容
1. 缺少LoginController.php是正常情况
Laravel 9起,官方默认的认证脚手架(如Breeze、Jetstream或laravel/ui的新版实现)不再生成独立的LoginController.php,而是将认证逻辑整合到路由、请求类或模型中,这是框架版本迭代后的正常架构变化。
2. 实现自定义认证字段的两种方法
方法一:在User模型中重写username方法
直接在app/Models/User.php中添加以下代码,Laravel认证系统会自动识别该方法并使用指定字段作为认证标识:
public function username() { return 'login_id'; }
方法二:修改认证守卫配置
编辑config/auth.php文件,在对应守卫的配置中指定username字段:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', 'username' => 'login_id', // 自定义认证字段 ], // 其他守卫配置... ],
同时确保providers配置指向正确的User模型:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ],
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

