Laravel修改认证表为logins后注册仍查询users表报字段不存在错误
问题根因
你触发的SQL错误直接来自注册逻辑的邮箱唯一性校验规则配置错误,还有几处关联的认证逻辑配置不匹配问题,逐一修复即可:
修复步骤
1. 修正邮箱唯一性校验的表名
打开app/Http/Controllers/Auth/RegisteredUserController.php,找到store方法里的验证规则,将email字段的unique:users改为unique:logins,指定校验logins表而非默认的users表:
// 修改前 'email' => 'required|string|email|max:255|unique:users', // 修改后 'email' => 'required|string|email|max:255|unique:logins',
2. 修正Login模型的继承关系
你的Login模型作为认证系统的用户提供方模型,需要继承认证基类而非普通模型,修改app/Models/Login.php代码:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class Login extends Authenticatable { use HasFactory, Notifiable; protected $fillable = [ 'email', 'password' ]; protected $hidden = [ 'password', 'remember_token', ]; }
3. 统一认证主体
你当前auth配置指定的认证提供方是Login模型,但注册后调用Auth::login()传入的是User实例,会导致后续登录校验异常,调整为传入Login实例:
// 原代码 Auth::login($user); // 修改后 Auth::login($login);
4. 修正User模型字段名大小写错误
User模型的$fillable里写的logInID和你创建User时传入的loginID大小写不一致,会导致关联ID写入失败,修改app/Models/User.php的fillable配置:
protected $fillable = [ 'name', 'address', 'irdNum', 'phone', 'loginID' ];
5. 清理配置缓存
运行命令清理Laravel的配置缓存,避免旧配置残留影响:
php artisan config:clear
内容的提问来源于stack exchange,提问作者user11518995
相关产品推荐
相关产品推荐

