Laravel 5:仅在更改密码输入时更改密码
Laravel 5: Password change only when password input is changed
我目前正在我的 Laravel 应用程序上处理用户编辑表单,其中包括密码输入。目前,每次我点击更新按钮时,即使不更改当前密码,它也会更新密码。我希望只有在有输入时才会重置密码。下面是我的代码:
用户控制器
public function update(Request $request, $id)
{
//
$user = User::findOrFail($id);
$user->name = $request->get('name');
$user->email = $request->get('email');
$user->password = $request->get('password');
$this->validate($request, User::validationRules());
$user->save();
return redirect('/user');
}
User.php(模特)
public static function validationRules( $attributes = null )
{
$rules = [
'name' => 'required|string|max:100',
'email' => 'required|email'
];
// no list is provided
if(!$attributes)
return $rules;
// a single attribute is provided
if(!is_array($attributes))
return [ $attributes => $rules[$attributes] ];
// a list of attributes is provided
$newRules = [];
foreach ( $attributes as $attr )
$newRules[$attr] = $rules[$attr];
return $newRules;
}
public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
也许你可以试试
$data = $request->all();
if( empty( $data['password'] ) ){
unset($data['password']);
}
User::find($id)->update($data);
我通常处理 this.Good 运气。
刚刚解决了我自己的问题。模型没有问题,我更关注控制器。我根据请求创建了新变量,因此 newpassword 和 verifypassword 字段会很清楚。它们都是匹配的,如果它是正确的,它会给出一个新的输入。在模型中,密码是加密的,所以不需要在控制器中使用 bcrypt。
我希望这可以帮助其他面临类似问题的人,并希望在同一表单中使用验证输入更新密码。
public function update(Request $request, $id)
{
//
$data = $request->all();
$userinput['name'] = $data['name'];
$userinput['email'] = $data['email'];
//check to see if field new password is filled.
if($data['newpassword'])
{
//verify that the newpassword input matches the verify password
if($data['newpassword'] == $data['verifypassword']) {
$userinput['password'] = $data['newpassword'];
}
//else statement can be made for the case if newpassword != verifypassword
}
$this->validate($request, User::validationRules());
User::find($id)->update($userinput);
return redirect('/user');
}
我目前正在我的 Laravel 应用程序上处理用户编辑表单,其中包括密码输入。目前,每次我点击更新按钮时,即使不更改当前密码,它也会更新密码。我希望只有在有输入时才会重置密码。下面是我的代码:
用户控制器
public function update(Request $request, $id)
{
//
$user = User::findOrFail($id);
$user->name = $request->get('name');
$user->email = $request->get('email');
$user->password = $request->get('password');
$this->validate($request, User::validationRules());
$user->save();
return redirect('/user');
}
User.php(模特)
public static function validationRules( $attributes = null )
{
$rules = [
'name' => 'required|string|max:100',
'email' => 'required|email'
];
// no list is provided
if(!$attributes)
return $rules;
// a single attribute is provided
if(!is_array($attributes))
return [ $attributes => $rules[$attributes] ];
// a list of attributes is provided
$newRules = [];
foreach ( $attributes as $attr )
$newRules[$attr] = $rules[$attr];
return $newRules;
}
public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
也许你可以试试
$data = $request->all();
if( empty( $data['password'] ) ){
unset($data['password']);
}
User::find($id)->update($data);
我通常处理 this.Good 运气。
刚刚解决了我自己的问题。模型没有问题,我更关注控制器。我根据请求创建了新变量,因此 newpassword 和 verifypassword 字段会很清楚。它们都是匹配的,如果它是正确的,它会给出一个新的输入。在模型中,密码是加密的,所以不需要在控制器中使用 bcrypt。
我希望这可以帮助其他面临类似问题的人,并希望在同一表单中使用验证输入更新密码。
public function update(Request $request, $id)
{
//
$data = $request->all();
$userinput['name'] = $data['name'];
$userinput['email'] = $data['email'];
//check to see if field new password is filled.
if($data['newpassword'])
{
//verify that the newpassword input matches the verify password
if($data['newpassword'] == $data['verifypassword']) {
$userinput['password'] = $data['newpassword'];
}
//else statement can be made for the case if newpassword != verifypassword
}
$this->validate($request, User::validationRules());
User::find($id)->update($userinput);
return redirect('/user');
}