首页 > 解决方案 > Laravel:在 API 上更改密码后登录失败

问题描述

JWT 新手,我想简单地更改我的密码,然后我尝试登录它不起作用。

我的更新密码功能代码:

public function resetPassword(ResetPasswordRequest $request, JWTAuth $JWTAuth)
{
    $password = Hash::make($request->password);
    $user = User::where('email', '=', $request->email)->first();
    if(!$user) {
        return response()->json([
            'message' => "Credential do not match",
            'status_code' => 403,
        ]);
    }
    if($user) {
        $user->password = $password;
        $user->save();
    }
    return response()->json(['message' => 'Your password has been changed successfully','status_code' => 204]);
}

这个功能在我尝试登录后工作正常,返回$tokennull。

我的登录控制器代码:

public function login(LoginRequest $request, JWTAuth $JWTAuth)
{

    $credentials = $request->only(['email', 'password']);
    try {
        $token = Auth::guard()->attempt($credentials);
        if(!$token) {
            return response()->json([
                'message' => "Email and password do not match",
                'status_code' => 403,
            ]);
        }
        $user = Auth::user();
        $user->last_login = Carbon::now();
        $user->save();
        $user = Auth::user();
        $user->UserDeviceData()->firstOrCreate([
            'device_id' => $request->device_id
        ]);
    } catch (JWTException $e) {
        return response()->json([
            'message' => "Internal server error",
            'status_code' => 500,
        ]);
    }
    return (new UserTransformer)->transform($user);
}

型号user

public function setPasswordAttribute($value)
{
    $this->attributes['password'] = Hash::make($value);
}

问题是什么 ?这是更改密码的正确方法吗?

标签: laravellaravel-5.5

解决方案


重置密码时,您将密码哈希两次,一次在resetPassword函数中,第二次在,setPasswordAttribute因此您需要替换

这个 $password = Hash::make($request->password)

有了这个 $password = $request->password;

在你的resetPassword功能中


推荐阅读