laravel - 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]);
}
这个功能在我尝试登录后工作正常,返回$token
null。
我的登录控制器代码:
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);
}
问题是什么 ?这是更改密码的正确方法吗?
解决方案
重置密码时,您将密码哈希两次,一次在resetPassword
函数中,第二次在,setPasswordAttribute
因此您需要替换
这个
$password = Hash::make($request->password)
;
有了这个
$password = $request->password;
在你的resetPassword
功能中
推荐阅读
- c# - Microsoft Graph Api - 询问 Me.Photo 时没有权限访问令牌
- ansible - “ansible_ssh_common_args”变量可以用于库存文件中的不同子组吗?
- javascript - 知道如何为我的 wordpress 插件添加表格吗?
- xcode - 反应原生 glog iOS:未知类型名称'_START_GOOGLE_NAMESPACE_'
- python - 用 NaN 填充缺失的日期时间或抑制折线图中的直线
- c# - ChromeDriver 无法在 Windows 7 中运行 Chrome。为什么?
- c# - 命名元组定义中的自定义名称成为默认名称“Item1”和“Item2”
- python - 重新连接后 Mqtt 不向订阅者发送数据
- r - 如何根据单独变量的 bin 识别一个变量的最大值
- testng - fail(String message) 方法在测试中被调用两次时的行为如何