在 Laravel 5.4 中更改密码
Change Password In Laravel 5.4
我已经在我的网络应用程序中添加了更改密码的代码。但是 Hash::check()
不起作用。始终 return 错误。另外 Hash::Make()
return 每次都是不同的字符串。我试过 bcrypt()
但它也不起作用。请帮我。这是我的代码。
public function changePassword(Request $request)
{
$user = Auth::user();
$curPassword = $request->input['curPassword'];
$newPassword = $request->input['newPassword'];
if (Hash::check($curPassword, $user->password)) {
$user_id = $user->id;
$obj_user = User::find($user_id)->first();
$obj_user->password = Hash::make($newPassword);
$obj_user->save();
return response()->json(["result"=>true]);
}
else
{
return response()->json(["result"=>false]);
}
}
谢谢。
我认为你的 $curPassword 变量是空的,这就是它总是返回 false 的原因。试试这个
$curPassword = $request->curPassword;
$newPassword = $request->newPassword;
除非您在 input
数组中发送数据。但是有些人 Hash::check()
失败了,这意味着没有匹配项。
至于相同的字符串,是的,Hash::make()
总是returns不同的字符串。我猜是出于安全目的。
应该是
$curPassword =$request->input('curPassword');
$newPassword = $request->input('newPassword');
没有
$curPassword = $request->input['curPassword'];
$newPassword = $request->input['newPassword'];
在 Laravel Documentation 他们说如果你想更改密码,你可以在检查后做的是
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
我是这样做的:
在我的控制器中,我使用以下方法:
public function changePassword()
{
$this->validate(request(), [
'current_password' => 'required|current_password',
'new_password' => 'required|string|min:6|confirmed',
]);
request()->user()->fill([
'password' => Hash::make(request()->input('new_password'))
])->save();
request()->session()->flash('success', 'Password changed!');
return redirect()->route('password.change');
}
这将验证输入,然后正确保存当前用户的新密码。它还会闪烁一条消息,然后 returns 将它们发送到密码更改表单。您可以删除该部分并在那里做您自己的事情。
这利用了我创建的名为 current_password
的自定义验证规则。您必须像这样将其添加到您的 AppServiceProvider::boot()
方法中:
public function boot()
{
// current password validation rule
Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) {
return Hash::check($value, Auth::user()->password);
});
}
只需确保您在 AppServiceProvider
.
中使用 Auth
、Hash
和 Validator
外观
最后,我们只需在 lang/en/validation.php
文件中声明我们的错误消息:
'current_password' => "The :attribute is invalid.",
希望这对您有所帮助。
这一行也有错误
$obj_user = User::find($user_id)->first();
应该是
$obj_user = User::find($user_id);
正如官方文档所说
// Retrieve a model by its primary key...
$flight = App\Flight::find(1);
// Retrieve the first model matching the query constraints...
$flight = App\Flight::where('active', 1)->first();
我已经在我的网络应用程序中添加了更改密码的代码。但是 Hash::check()
不起作用。始终 return 错误。另外 Hash::Make()
return 每次都是不同的字符串。我试过 bcrypt()
但它也不起作用。请帮我。这是我的代码。
public function changePassword(Request $request)
{
$user = Auth::user();
$curPassword = $request->input['curPassword'];
$newPassword = $request->input['newPassword'];
if (Hash::check($curPassword, $user->password)) {
$user_id = $user->id;
$obj_user = User::find($user_id)->first();
$obj_user->password = Hash::make($newPassword);
$obj_user->save();
return response()->json(["result"=>true]);
}
else
{
return response()->json(["result"=>false]);
}
}
谢谢。
我认为你的 $curPassword 变量是空的,这就是它总是返回 false 的原因。试试这个
$curPassword = $request->curPassword;
$newPassword = $request->newPassword;
除非您在 input
数组中发送数据。但是有些人 Hash::check()
失败了,这意味着没有匹配项。
至于相同的字符串,是的,Hash::make()
总是returns不同的字符串。我猜是出于安全目的。
应该是
$curPassword =$request->input('curPassword');
$newPassword = $request->input('newPassword');
没有
$curPassword = $request->input['curPassword'];
$newPassword = $request->input['newPassword'];
在 Laravel Documentation 他们说如果你想更改密码,你可以在检查后做的是
$request->user()->fill([
'password' => Hash::make($request->newPassword)
])->save();
我是这样做的:
在我的控制器中,我使用以下方法:
public function changePassword()
{
$this->validate(request(), [
'current_password' => 'required|current_password',
'new_password' => 'required|string|min:6|confirmed',
]);
request()->user()->fill([
'password' => Hash::make(request()->input('new_password'))
])->save();
request()->session()->flash('success', 'Password changed!');
return redirect()->route('password.change');
}
这将验证输入,然后正确保存当前用户的新密码。它还会闪烁一条消息,然后 returns 将它们发送到密码更改表单。您可以删除该部分并在那里做您自己的事情。
这利用了我创建的名为 current_password
的自定义验证规则。您必须像这样将其添加到您的 AppServiceProvider::boot()
方法中:
public function boot()
{
// current password validation rule
Validator::extend('current_password', function ($attribute, $value, $parameters, $validator) {
return Hash::check($value, Auth::user()->password);
});
}
只需确保您在 AppServiceProvider
.
Auth
、Hash
和 Validator
外观
最后,我们只需在 lang/en/validation.php
文件中声明我们的错误消息:
'current_password' => "The :attribute is invalid.",
希望这对您有所帮助。
这一行也有错误
$obj_user = User::find($user_id)->first();
应该是
$obj_user = User::find($user_id);
正如官方文档所说
// Retrieve a model by its primary key...
$flight = App\Flight::find(1);
// Retrieve the first model matching the query constraints...
$flight = App\Flight::where('active', 1)->first();