Laravel 从带有哈希的表单更新用户密码
Posted
技术标签:
【中文标题】Laravel 从带有哈希的表单更新用户密码【英文标题】:Laravel update user password from form with hash 【发布时间】:2018-10-29 15:26:48 【问题描述】:所以我有这个包含 3 个字段(用户电子邮件、密码和密码确认)的表单。此表单发布到将我带到以下控制器的路线:
public function updateUser($id, Request $request)
//validate post data
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|confirmed|min:6',
]);
$request->all();
$request['email'] = $request['email'];
$request['password'] = Hash::make($request['password']);
$postData = [$request['email'], $request['password']];
User::find($id)->update($postData);
//store status message
Session::flash('success_msg', 'User details updated successfully!');
return redirect()->route('admin.user');
问题是,这段代码根本没有更新我的数据库,尽管它没有给我任何错误。
基本上我想做的是让管理员在管理面板中更改默认帐户详细信息。安装应用程序后,默认管理员详细信息由播种机创建。 (这个应用程序是单用户 - 只有管理员)
谢谢大家!
【问题讨论】:
【参考方案1】:您必须传递数组的键才能识别列。
public function updateUser($id, Request $request)
//validate post data
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|confirmed|min:6',
]);
$userData = $request->only(["email","password"]);
$userData['password'] = Hash::make($userData['password']);
User::find($id)->update($userData);
Session::flash('success_msg', 'User details updated successfully!');
return redirect()->route('admin.user');
【讨论】:
我试过这个,它对我有用。现在它正在更新数据库,但是当我尝试使用新凭据登录时,它就不起作用了。请注意,我使用的是 laravel Auth 默认登录页面,但是,我已禁用所有其他 Auth 路由(注销除外)。 分享你如何登录的代码?确保您在此处提供的值$userData['password']
,您是否再次尝试交叉检查?
我只使用默认的 Laravel 登录视图和控制器
更新:我已经解决了这个问题。我在用户控制器中有一个函数,它对已经散列的字符串进行双重散列。它现在就像一个魅力!【参考方案2】:
public function updateUser($id, Request $request)
//validate post data
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|confirmed|min:6',
]);
$input = $request->all();
$input['email'] = $request['email'];
$input['password'] = Hash::make($request['password']);
User::find($id)->update($input);
//store status message
Session::flash('success_msg', 'User details updated successfully!');
return redirect()->route('admin.user');
【讨论】:
你改变了什么添加一些解释? 我试过这个,它对我有用。现在它正在更新数据库,但是当我尝试使用新凭据登录时,它就不起作用了。请注意,我使用的是 laravel Auth 默认登录页面,但是,我已禁用所有其他 Auth 路由(注销除外)。【参考方案3】:您可以通过这样做在用户模型中默认设置密码哈希
public function setPasswordAttribute($value)
$this->attributes['password'] = Hash::make($value);
比更新用户,只需这样做
User::find($id)->update($request->only('email','password'));
【讨论】:
这是我正在寻找的完美解决方案。这是非常聪明的解决方案。谢谢 如果你这样做了,在注册用户时,你将你的通行证哈希两次,并记住密码以及哈希两次以上是关于Laravel 从带有哈希的表单更新用户密码的主要内容,如果未能解决你的问题,请参考以下文章
如何从 wordpress 的更新配置文件选项中获取密码字符串?
带有 BCrypt 哈希的 AES 256。如何从数据库中检查用户密码? [复制]