2、自己的数据库给自己挖了个坑,Password字段而不是password,说真的这个坑真心没那么容易发现,首字母大小写问题,针对这个问题要在\app\Models\User.php加下面代码
public function getAuthPassword()
{
return $this->Password; // 这里使用你的大写字段名 2025-10-12 at 3116
}
3、最后是处理MD5加密落后的问题,又要在上面的文件中加
public function validatePassword($plainPassword)
{
// 对比明文密码的 MD5 与数据库中的密码 2025-10-12 at 3116
return md5($plainPassword) === $this->Password;
}
4、然后在控制器要这样写
public function login(Request $request)
{
// 1. 先验证请求参数(确保 user_id 和 password 存在)
$request->validate([
'user_id' => 'required',
'password' => 'required',
]);
// 2. 手动查询数据库中对应的用户(根据你的实际表和字段名调整)
// 注意:这里的 `Password` 是你数据库中存储密码的字段(首字母大写)
$user = \App\Models\User::where('user_id', $request->input('user_id'))->first();
// 3. 分两步验证:① 用户是否存在 ② 密码(MD5)是否匹配
if (empty($user)) {
// 情况1:用户不存在(避免泄露具体错误,统一提示“凭据不匹配”)
return back()->withErrors([
'user_id' => '提供的凭据与我们的记录不匹配。',
])->onlyInput('user_id');
}
if (md5($request->input('password')) !== $user->Password) {
// 情况2:密码不匹配
return back()->withErrors([
'user_id' => '提供的凭据与我们的记录不匹配。',
])->onlyInput('user_id');
}
// 4. 手动让用户登录(创建会话,等同于 Auth::attempt() 成功后的效果)
//Auth::login($user);
// 5. 重新生成会话ID,防止会话固定攻击(安全最佳实践)
$request->session()->regenerate();
// 6. 登录成功,重定向到首页或用户原本想访问的页面
//echo "登录成功啦,,,";exit;终于测试到登录成功了 2025-10-12 at 3116
// 登录成功后
Auth::login($user);
$request->session()->regenerate();
// 存储需要在模板中使用的 Session 数据
session([
'user_id' => $user->user_id,
'user_type' => $user->user_type
//'is_admin' => $user->is_admin 示例:是否为管理员
]);
return redirect()->intended('/jjbbs');
// 认证失败
return back()
->withInput($request->only('user_id'))
->withErrors([
'user_id' => '用户名或密码不正确',
]);
}
5、然后还不能忘记laravel默认是email作为用户名登录的,所以还要在控制器写
// 关键:指定登录使用的用户名字段(默认是email)
public function username()
{
return 'user_id';
}


