如何使用 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) 以减少控制器中的代码量(在其他优势)。
我需要将密码以散列形式存储到数据库中,我能够获得密码,但是当我提交表单时,密码存储为未散列形式,
这是我的控制器存储功能
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) 以减少控制器中的代码量(在其他优势)。