如何在Laravel中修改身份认证方式为用户名密码登录?
Laravel登录改用Username认证的Controller修改步骤
当你把登录表单的认证字段从email改成username后,需要在LoginController里做两处关键修改——因为Laravel默认的AuthenticatesUsers trait是基于email处理认证逻辑的:
重写
username()方法
默认情况下,AuthenticatesUserstrait会把email作为登录标识字段,你需要在控制器中新增这个方法,告诉框架改用username:public function username() { return 'username'; }重写
validateLogin()方法
原trait的验证规则是校验email字段,你需要替换成username的验证规则:protected function validateLogin(Request $request) { $request->validate([ $this->username() => 'required|string', 'password' => 'required|string', ]); }
修改后的完整LoginController代码
use Illuminate\Http\Request; use AuthenticatesUsers; /** * Where to redirect users after login. * * @var string */ protected $redirectTo = '/events'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } /** * Get the login username to be used by the controller. * * @return string */ public function username() { return 'username'; } /** * Validate the user login request. * * @param \Illuminate\Http\Request $request * @return void */ protected function validateLogin(Request $request) { $request->validate([ $this->username() => 'required|string', 'password' => 'required|string', ]); }
额外注意:要确保你的User模型对应的数据库表中存在username字段,并且模型的$fillable属性包含username(如果需要批量赋值操作的话)。
内容的提问来源于stack exchange,提问作者marzouk najib
相关产品推荐
相关产品推荐

