我正在使用laravel 5.2中包含的身份验证:
https://laravel.com/docs/5.2/authentication#included-routing
我想为经过身份验证的用户实现“更改密码”功能,我有两个选择:
我可以使用附带的'/ password / reset'路线,但不是最佳路线。但它仅在用户未登录时才有效。我是否可以让它对经过身份验证的用户起作用?
我可以在视图中创建“输入新密码”表单,并在updatePassword
中创建UsersController
方法。但我需要检查提交的密码是否为空,这意味着用户想要更改密码,然后应用验证规则,然后加密并更新它。这是正确的做法吗?任何例子都将不胜感激。
答案 0 :(得分:1)
我认为#2是要走的路,它只是用户设置表单中的另一个字段。在我的应用程序中它看起来像这样:
$user->update($request->except('password'));
if($request->get('password') != ""){
$user->password = Hash::make($request->get('password'));
}
$user->save();
我会进行特殊检查,以确保我不会从空白字段更新密码。添加验证味道。
答案 1 :(得分:1)
我已在我的用户文件中实施了更改密码,如下所示
public function postReset(Request $request)
{
$this->validate($request, [
'password' => 'required|confirmed','email' => 'required|email',
]);
$user = User::findOrFail($id);
$input = $request->input();
//Change Password if password value is set
if ($input['password'] != "") {
//dd(bcrypt($input['password']));
$input['password'] = bcrypt($input['password']);
}
$user->fill($input)->save();
}
答案 2 :(得分:0)
您可以在模型中设置设置属性,如
public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}
在编辑方法中:
if (empty($request->password)) {
$data = $request->except('password');
} else {
$data = $request->all();
}
$user = $this->userRepository->update($data, $id);