我有一个updatePassword方法来更新用户的密码。
有一些规则:
- the introduced actual password should be equal to the actual password of the user (users table has a column "password" on db)
- the new_password and new_password_confirm should be equal
- the actual_password and new_password should be different
我有以下代码。但它似乎总是验证错误"实际密码确认不匹配。"即使引入的实际密码是正确的。
你知道错误在哪里吗?
public function updatePassword(Request $request){
$this->validate($request, [
'actual_password' => 'required|string|min:6|confirmed',
'new_password' => 'required|string|min:6',
'new_password_confirm' => 'required|string|min:6|same:new_password',
]);
$user = Auth::user();
$user->password = bcrypt($request->new_password);
$user->save();
Session::flash('success', 'updated.');
return redirect()->back();
}
形式:
<form method="post" action="{{route('user.updatePassword')}}" class="clearfix">
{{csrf_field()}}
<div>
<label>New Password</label>
<input type="password" class="form-control" name="actual_password" id="actual_password" placeholder="">
</div>
<div>
<label for="new_password">New Password</label>
<input type="password" class="form-control" name="new_password" id="new_password" placeholder="">
</div>
<div>
<label>Confirm password</label>
<input type="password" name="new_password_confirm" class="form-control" id="new_password_confirm" placeholder="">
</div>
<div class="form-group">
<input type="submit" value="Update password"/>
</div>
</form>
提交传递的Var转储:
array:3 [▼
"actual_password" => "password"
"new_password" => "passwordw"
"new_password_confirm" => "passwordw"
]
答案 0 :(得分:1)
您可能已在错误的地方确认:
$this->validate($request, [
'actual_password' => 'required|string|min:6',
'new_password' => 'required|string|min:6|confirmed',
'new_password_confirmation' => 'required|string|min:6|same:new_password',
]);
修改:第二个字段必须以_confirmation
结尾,而不是_confirm
。这是内置要求。
答案 1 :(得分:0)
规则可以简化:
$this->validate($request, [
'actual_password' => 'required|string|min:6',
'new_password' => 'required|string|min:6|different:actual_password',
'new_password_confirm' => 'same:new_password',
]);
一些注意事项:
min:10
而不是min:6
),它甚至可能成为未来的问题,因为这样您可能会遇到更改密码的麻烦(本来可能会有效但在代码更改后没有,所以你甚至不能改变它。)different:actual_password
,以确保新密码与旧密码不同。对这个验证规则使用正则表达式也是有意义的,例如,强制使用不同类型的字符(小写和大写字母,数字和特殊字符)。same:new_password
规则绝对有效并且是一个很好的解决方案。就个人而言,我甚至发现Dimitri Mostry提到的魔法验证规则confirm
有点危险,因为人们很可能无法理解未来的背景(即可维护性不好)。在后台,confirm
方法与same:other_field
(see here)完全相同。但是,所有其他验证规则都已过时。当您为new_password
执行已经执行时,您必须强制性地强制它们用于确认字段,当它必须是相同的值时。