Laravel使用admins_id登录提示“登录信息未注册”问题排查
Laravel 7.16.1 新增admins_id+密码登录失败排查方案
1. 检查认证逻辑是否支持admins_id查询
默认Laravel认证仅通过email查找用户,你需要修改登录逻辑,让系统识别admins_id作为登录凭证:
- 打开
app/Http/Controllers/Auth/LoginController.php,重写credentials方法,同时支持邮箱或用户ID登录:
protected function credentials(Request $request) { // 判断提交的是邮箱还是admins_id $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'admins_id'; return [ $field => $request->input('login'), 'password' => $request->input('password'), ]; }
注:这里假设登录表单的用户名输入框命名为login,若仍用原email字段,可调整为判断request->has('admins_id'),或直接同时查询两个字段。
如果是单独新增登录入口,需在逻辑里明确用admins_id查询用户:
// 登录方法内 $user = \App\User::where('admins_id', $request->admins_id)->first(); if ($user && \Hash::check($request->password, $user->password)) { \Auth::login($user); // 跳转逻辑 } else { // 登录失败提示 }
2. 确认用户模型的批量赋值设置
若用户模型(如App\User)未将admins_id加入$fillable数组,可能影响字段读取(即便手动在phpMyAdmin插入数据,也需确保模型支持该字段):
// 用户模型中 protected $fillable = [ 'name', 'email', 'password', 'admins_id', // 新增admins_id ];
3. 检查新用户密码是否已哈希加密
Laravel的Auth::attempt仅验证哈希后的密码,若phpMyAdmin中直接插入明文密码,必然验证失败:
- 打开tinker工具验证:
php artisan tinker
- 执行密码校验:
Hash::check('你输入的明文密码', '数据库中存储的密码值');
若返回false,需重新生成哈希值并更新数据库:
Hash::make('你的明文密码');
将生成的哈希字符串替换数据库内的密码字段值。
4. 验证表单字段名与后端接收是否一致
确保登录表单的用户ID输入框name属性为admins_id,与后端接收字段一致:
<input type="text" name="admins_id" placeholder="用户ID"> <input type="password" name="password" placeholder="密码">
若后端误写为admin_id(少了s),会导致字段匹配失败。
5. 检查认证守卫的Provider配置
打开config/auth.php,确认认证守卫对应的provider指向正确的用户模型,且模型包含admins_id字段:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, // 确认模型路径正确 ], ],
若为单独的管理员认证,需新增对应的guard和provider,确保查询的模型包含admins_id字段。
内容的提问来源于stack exchange,提问作者go_live
相关产品推荐
相关产品推荐

