Laravel 密码哈希不正确
Laravel password hash is incorrect
我正在尝试在 Laravel 中更新密码,密码正在更新,但是当我尝试登录时 it shows wrong details
,我不确定我在这里做错了什么。
public function passwordupdate(Request $request, $id)
{
$user = User::find($id);
// Column updating with incorrect Hash
$user->password = Hash::make($request->password);
$user->setRememberToken(Str::random(60));
$user->active = 0; // This value is updating correctly
$user->save();
return response()->json(['msg' => 'password updated']);
}
正如我提到的,我的请求发布了一个空值,所以我添加了 Ajax 代码来找出原因。
Ajax
$('.update_password').on('click', function (e) {
console.log('Update password clicked!')
e.preventDefault();
$.ajax({
type: "POST",
dataType: 'json',
data: $(this).serialize(),
url: "/users/" + $('#user_pwid').val(),
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function (data) {
if (data.msg) {
$('#response').empty();
$(".toast").toast('show');
$('#response').append(data.msg);
}
}
});
});
View/Blade
<form method="post" id="policy-form">
@csrf
<input type="hidden" value="">
<select name="name" id="user_pwid" class="form-control user_pwid border border-secondary border-dark" required>
<option selected value="">SELECT USER</option>
@foreach($users as $user)
<option value="{{$user->id}}"> {{$user->name}}</option>
@endforeach
</select>
<input type="password" name="password" id="password">
<button type="click" class="btn btn-danger btn-sm update_password rounded text-center" value="{{$user->id}}"
id="update-password"></button>
</form>
$request->password
是否真的有预期的密码?你确定你没有在双哈希密码的模型上写一个修改器吗?
您创建自己的密码重置控制器而不是使用 Laravel 附带的控制器是否有充分的理由?另外 - 你 真的 不想将密码发回给 JSON 中的用户。
试试这个:
控制器代码:
public function passwordupdate(Request $request,$id) {
$user = User::find($id);
if(!is_null($user)){
$user->password = Hash::make($request->password);
$user->setRememberToken(Str::random(60));
$user->active =0;
$user->save();
return response('success');
}
else{
return response('failed');
}
}
Ajax代码:
$('#update-password').on('click', function(e) {
e.preventDefault();
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
},
type: "post",
url: "/users/" + $('#user_pwid').val(),
data :{
password : $('#password').val(),
},
success: function (data) {
if(data == 'success'){
alert('password changed successfully');
$('#response').empty();
$(".toast").toast('show');
$('#response').append(data);
}
else{
alert('failed');
}
},
});
});
尝试一下它会起作用
我正在尝试在 Laravel 中更新密码,密码正在更新,但是当我尝试登录时 it shows wrong details
,我不确定我在这里做错了什么。
public function passwordupdate(Request $request, $id)
{
$user = User::find($id);
// Column updating with incorrect Hash
$user->password = Hash::make($request->password);
$user->setRememberToken(Str::random(60));
$user->active = 0; // This value is updating correctly
$user->save();
return response()->json(['msg' => 'password updated']);
}
正如我提到的,我的请求发布了一个空值,所以我添加了 Ajax 代码来找出原因。
Ajax
$('.update_password').on('click', function (e) {
console.log('Update password clicked!')
e.preventDefault();
$.ajax({
type: "POST",
dataType: 'json',
data: $(this).serialize(),
url: "/users/" + $('#user_pwid').val(),
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function (data) {
if (data.msg) {
$('#response').empty();
$(".toast").toast('show');
$('#response').append(data.msg);
}
}
});
});
View/Blade
<form method="post" id="policy-form">
@csrf
<input type="hidden" value="">
<select name="name" id="user_pwid" class="form-control user_pwid border border-secondary border-dark" required>
<option selected value="">SELECT USER</option>
@foreach($users as $user)
<option value="{{$user->id}}"> {{$user->name}}</option>
@endforeach
</select>
<input type="password" name="password" id="password">
<button type="click" class="btn btn-danger btn-sm update_password rounded text-center" value="{{$user->id}}"
id="update-password"></button>
</form>
$request->password
是否真的有预期的密码?你确定你没有在双哈希密码的模型上写一个修改器吗?
您创建自己的密码重置控制器而不是使用 Laravel 附带的控制器是否有充分的理由?另外 - 你 真的 不想将密码发回给 JSON 中的用户。
试试这个:
控制器代码:
public function passwordupdate(Request $request,$id) {
$user = User::find($id);
if(!is_null($user)){
$user->password = Hash::make($request->password);
$user->setRememberToken(Str::random(60));
$user->active =0;
$user->save();
return response('success');
}
else{
return response('failed');
}
}
Ajax代码:
$('#update-password').on('click', function(e) {
e.preventDefault();
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
},
type: "post",
url: "/users/" + $('#user_pwid').val(),
data :{
password : $('#password').val(),
},
success: function (data) {
if(data == 'success'){
alert('password changed successfully');
$('#response').empty();
$(".toast").toast('show');
$('#response').append(data);
}
else{
alert('failed');
}
},
});
});
尝试一下它会起作用