You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel+Vue.js登录异常:返回Invalid Login错误求助

排查Laravel登录返回"Invalid Login"的问题

让我帮你梳理下这个登录功能的问题,我一眼就看到了几个关键的地方,咱们一步步来解决:

1. 最明显的问题:字段不匹配

你在验证规则里校验的是user_id字段(要求是邮箱格式),但在Auth::attempt里却用了request('email')来匹配数据库的email字段!这就导致前端传的user_id根本没被用到,自然匹配不到用户。

你需要把这两处统一,二选一:

  • 方案一:修正验证规则,把user_id改成email,和Auth::attempt的参数对应:
$validation = Validator::make($request->all(),[
    'email' => 'required|email', // 这里改成email
    'password' => 'required|string|min:8|max:15',
]);
  • 方案二:修正Auth::attempt的参数,用request('user_id')来匹配数据库的email字段:
if(Auth::attempt(['email' => request('user_id'), 'password' => request('password')])){

2. 检查密码是否正确哈希存储

Laravel的Auth::attempt方法会自动用哈希算法对比密码,但前提是你存储用户密码的时候用了Hash::make()加密。如果用户注册/创建时密码是明文存储的,那肯定验证失败。

确保你创建用户时的密码处理代码是这样的:

// 示例:注册用户时的密码加密
$user = new User();
$user->email = $request->email;
$user->password = Hash::make($request->password); // 必须用Hash::make加密
$user->save();

3. 调试确认用户是否存在&密码是否匹配

如果上面的问题都修正了还是不行,建议加调试代码,看看具体哪里出问题:

// 在Auth::attempt之前添加以下代码,打印请求参数和数据库用户信息
$inputEmail = $request->user_id; // 或者$request->email,根据你修正后的字段来
$inputPassword = $request->password;

// 检查用户是否存在
$user = User::where('email', $inputEmail)->first();
if (!$user) {
    dd('数据库中不存在该邮箱的用户:'.$inputEmail);
}

// 检查密码是否匹配
if (!Hash::check($inputPassword, $user->password)) {
    dd('输入的密码和数据库存储的哈希密码不匹配');
}

4. 检查Auth Guard配置(可选)

如果你用了自定义的Auth Guard(比如api guard),要确保Auth::attempt使用了正确的guard:

// 比如用api guard的话
if(Auth::guard('api')->attempt(['email' => $inputEmail, 'password' => $inputPassword])){

先把最核心的字段不匹配问题解决,应该就能解决大部分情况了,如果还有问题,用调试代码就能定位到具体原因~

内容的提问来源于stack exchange,提问作者user3653474

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:43:10