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

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()自然无法匹配。

修复方案

  1. 修正注册函数中的参数拼写错误,将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'
        ]);
    }
  1. 额外优化建议:
    • 使用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属性)。

内容的提问来源于stack exchange,提问作者furkan aydınlı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:23:13