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

Laravel 8多认证中,学生端以手机号为密码登录失败的解决求助

Laravel 8 多认证学生端登录问题解决

问题核心原因

你当前使用的 Auth::attempt() 方法是为哈希密码验证设计的,它会自动对输入的password值做哈希处理,再和模型返回的字段对比。但你的学生登录逻辑是用明文存储的mobile_no作为凭证,哈希后的输入值永远和明文手机号不匹配,导致验证失败。

解决方案:手动验证+登录

直接绕过默认的哈希验证逻辑,手动查询学生记录并完成登录:

1. 修改 LoginController 的登录逻辑

替换原有的webstudent守卫attempt验证代码:

public function postLogin(Request $request)
{
    $request->validate([
        'email' => 'required',
        'password' => 'required',
    ]);

    // 管理员登录(保留原有逻辑)
    if(Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password]))
    {
        return redirect()->route('admin.dashboard');
    }

    // 学生登录:手动查询匹配记录
    $student = \App\Models\Student::where('email_id', $request->email)
        ->where('mobile_no', $request->password)
        ->first();

    if ($student) {
        // 手动登录学生账号
        Auth::guard('webstudent')->login($student);
        return redirect()->route('student.dashboard');
    }

    // 登录失败返回
    return redirect()->route('login')->with(['error'=>'Login details are not valid']);
}

2. 移除无用代码

删除Student模型中重写的getAuthPassword()方法,因为现在不需要依赖Laravel的默认密码验证机制。

3. 可选:优化验证规则

如果学生登录的"密码"是手机号,可以针对性调整验证规则,提升体验:

$request->validate([
    'email' => 'required|email', // 若email_id是邮箱格式
    'password' => 'required|numeric|digits:11', // 适配11位手机号格式
]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:00:01