Laravel中登录验证始终跳转到登录失败页面问题排查
Laravel登录验证始终失败的排查方案
密码存储格式错误:
Auth::attempt()要求密码必须是通过Laravel自带的Hash::make()加密后存入数据库的。如果数据库里存的是明文或者用了其他加密方式,验证肯定过不了。可以在tinker里执行Hash::check('你的明文密码', '数据库里的密码字段值'),看返回结果是不是true。请求参数或数据库字段不匹配:
- 确认数据库里存用户邮箱的字段是
email,如果是自定义的user_email之类的,要把attempt数组里的键改成对应的字段名。 - 在
check_login方法开头加dd($request->only('email', 'password')),看看拿到的参数和数据库里的用户信息是否一致,有没有拼写错误或者大小写问题。
- 确认数据库里存用户邮箱的字段是
用户状态被限制:如果你的
User模型加了全局作用域(比如强制筛选status=1的用户),或者认证配置里加了额外条件,哪怕账号密码对,也会被拦截。可以临时注释模型里的全局作用域测试一下。CSRF或Session配置异常:
- 登录表单里必须加
@csrf指令,没有的话请求会被CSRF中间件拦截,直接导致验证失败。 - 检查
.env里的SESSION_DRIVER配置是否正常(比如file或database),session存储异常也会影响认证状态。
- 登录表单里必须加
认证配置或模型问题:
- 核对
config/auth.php里的defaults.guard是不是web,guards.web.provider对应的模型是不是你的User模型。 - 确认
User模型继承了Illuminate\Foundation\Auth\User类,并且引入了Authenticatabletrait,这是认证的基础。
- 核对
代码小细节修正:你的代码里用了
$request->session()->regenerateToken();,Laravel推荐登录后用$request->session()->regenerate();来重新生成session ID,防止会话固定攻击,虽然这个不会直接导致验证失败,但建议修正。
内容的提问来源于stack exchange,提问作者umesh tiwari
相关产品推荐
相关产品推荐

