如何使用 Laravel 5.8 将哈希密码存储到数据库

How to store Hashed Password to the Database using Laravel 5.8

我需要将密码以散列形式存储到数据库中,我能够获得密码,但是当我提交表单时,密码存储为未散列形式,

这是我的控制器存储功能

 public function store(Request $request)
{

    $hash = ['password' => Hash::make($request)];

    //dd($hash);
    // HASHED PASSWORD WAS DISPLAYED HERE 


    $user = User::create($this->validateRequest());

    dd('User Created');
}

这是我的验证函数

private function validateRequest()
{

    return request()->validate([
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
        'phone' => 'required',
    ]);
}

我尝试在我的商店功能中执行此操作(但没有成功!!)

public function store(Request $request)
    {

        $hash = ['password' => Hash::make($request)];

        $user = User::create($this->validateRequest($hash));
        dd('User Created');
   }

有没有办法可以通过这种方式将散列密码存储到数据库中?

否则我需要坚持这种方式吗;(?

$user = User::create([
            'name' => $request['name'],
            'phone' => $request['phone'],
            'email' => $request['email'],
            'password' => Hash::make($request['password']),
        ]);

我只是想让我的控制器用几行代码就干净了。

谁能帮帮我。

谢谢

您在更改 password 的值后验证 request,因此无法验证密码确认并返回验证错误。

首先验证 request,然后用散列值替换 password 值。

public function store(Request $request)
{
    $request->validate([
      'name' => ['required', 'string', 'max:255'],
      'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
      'password' => ['required', 'string', 'min:8', 'confirmed'],
      'phone' => 'required',
    ]);
    
    $request->merge(['password' => Hash::make($request->input('password'))]);

    $user = User::create($request->all());
    dd($user);
}

在您的 User 模型中使用一个修改器,这样每次您设置密码时,它都会被散列。

public function setPasswordAttribute($password)
{
    $this->attributes['password'] = Hash::make($password);
}

这样,您的 store 方法将如下所示:

public function store(Request $request)
{
    $user = User::create($this->validateRequest());
    dd('User Created');
}

这超出了这个问题的范围,但只是一个建议:您应该使用表单请求 class (https://laravel.com/docs/8.x/validation#creating-form-requests) 以减少控制器中的代码量(在其他优势)。