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 从带有哈希的表单更新用户密码的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5,更新用户密码

如何从 wordpress 的更新配置文件选项中获取密码字符串?

带有 BCrypt 哈希的 AES 256。如何从数据库中检查用户密码? [复制]

Laravel 5.2 - 经过身份验证的用户更改密码 - 更新后的密码匹配问题

用户在Laravel中更新密码后自动退出。我怎么防止这个?

更改密码用户 laravel 5.3