Laravel中Hash::check返回false导致无法登录的问题求助
问题描述
注册功能可正常写入用户数据到数据库,但调用登录接口时Hash::check()始终返回false,无法完成登录。相关代码如下:
注册函数代码
public function register(Request $request){ $name = $request->name; $email = $request->email; $password = $request->passowrd; $mailCheck = User::where('email',$email)->count(); if($mailCheck>0) { return response([ 'status'=>500, 'message'=>'E posta adresi kayıtlı' ]); } User::insert([ 'name' => $name, 'email' => $email, 'password' => Hash::make($password) ]); return response([ 'status'=>200, 'message'=>'ok' ]); }
登录函数代码
function index(Request $request) { $user= User::where('email', $request->email)->first(); if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); } $token = $user->createToken('my-app-token')->plainTextToken; $response = [ 'user' => $user, 'token' => $token ]; return response($response, 201); }
API路由配置
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); }); Route::post("login",[\App\Http\Controllers\UserController::class,'index']); Route::post("register",[\App\Http\Controllers\UserController::class,'register']);
问题根源
注册函数中存在拼写错误:$password = $request->passowrd;这里的passowrd多写了一个o,正确的参数名应该是password。这导致实际获取到的$password值为null,最终存储到数据库的是null的哈希值。而登录时传入的是正确的password参数,Hash::check()自然无法匹配。
修复方案
- 修正注册函数中的参数拼写错误,将
passowrd改为password:
public function register(Request $request){ $name = $request->name; $email = $request->email; // 修正拼写错误 $password = $request->password; $mailCheck = User::where('email',$email)->count(); if($mailCheck>0) { return response([ 'status'=>500, 'message'=>'E posta adresi kayıtlı' ]); } User::insert([ 'name' => $name, 'email' => $email, 'password' => Hash::make($password) ]); return response([ 'status'=>200, 'message'=>'ok' ]); }
- 额外优化建议:
- 使用Laravel的请求验证功能,确保参数必填且格式正确,避免类似拼写错误或参数缺失问题:
$validated = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8', ]); - 优先使用
User::create($validated)替代insert(),因为create()会触发模型的creating/created事件,且能自动处理批量赋值(需确保User模型中设置了$fillable属性)。
- 使用Laravel的请求验证功能,确保参数必填且格式正确,避免类似拼写错误或参数缺失问题:
内容的提问来源于stack exchange,提问作者furkan aydınlı
相关产品推荐
相关产品推荐

