Laravel 5.5认证自定义用户表字段与表名异常问题咨询
解决Laravel 5.5自定义用户表/字段后注册报错的问题
你已经在User模型里指定了自定义表名,但注册流程里还有几处默认配置没同步修改,导致系统依然去查询默认的users表和email字段。下面一步步来修复:
1. 更新注册控制器的验证规则
默认的RegisterController(位于app/Http/Controllers/Auth目录下)里的validator方法,验证规则中的unique约束还是硬编码指向了users表和email字段。你需要把它替换成你的自定义表名和字段:
打开RegisterController.php,修改validator方法:
protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|string|max:255', 'user_email' => 'required|string|email|max:255|unique:tbl_users,user_email', // 替换为你的表名和字段 'password' => 'required|string|min:6|confirmed', ]); }
如果前端注册表单的邮箱输入框name属性还是email,要么同步改成user_email,要么在控制器里做字段映射(比如把$data['email']赋值给user_email)。
2. 修改注册控制器的用户创建逻辑
同样在RegisterController里,create方法默认会把email字段写入数据库,你需要改成自定义的user_email:
protected function create(array $data) { return User::create([ 'name' => $data['name'], 'user_email' => $data['user_email'], // 对应数据库的字段名 'password' => Hash::make($data['password']), ]); }
同时要确保User模型的$fillable属性包含user_email,避免批量赋值报错:
protected $fillable = [ 'name', 'user_email', 'password', ];
3. 让认证系统适配自定义邮箱字段
Laravel认证系统默认依赖email字段做登录验证和密码重置,你需要在User模型里重写两个方法,让系统使用user_email:
// 指定登录验证用的字段 public function getAuthIdentifierName() { return 'user_email'; } // 指定密码重置时使用的邮箱字段 public function getEmailForPasswordReset() { return $this->user_email; }
完成以上步骤后,注册流程就会正确调用你的tbl_users表和user_email字段了。
内容的提问来源于stack exchange,提问作者Akif Hussain Sayyed
相关产品推荐
相关产品推荐

