所以我正在Laravel 4中实施Ardent,我似乎无法理清为什么这个密码确认无法匹配。
我的用户控制器看起来像这样:
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
use LaravelBook\Ardent\Ardent;
class User extends Ardent implements UserInterface, RemindableInterface {
public static $rules = array(
'first_name' => 'required|min:2|max:80|alpha',
'last_name' => 'required|min:2|max:80|alpha',
'email' => 'required|between:3,64|email|unique:users',
'postal_code' => 'required|min:5|max:80',
'password' => 'required|between:4,20|confirmed',
'password_confirmation' => 'same:password',
'timezone_id' => 'required|numeric',
);
public $autoPurgeRedundantAttributes = true;
然后在模型存储操作中,我有以下内容:
$user = new User(Input::all());
if($user->save()) {
// does a bunch of stuff
}
但最后密码确认警告是持久的,我似乎无法理清原因?如果我从密码字段中取出已确认的选项,则一切正常。我似乎无法让他们明白他们是一样的。我在测试中包含了一个示例var_dump,并确认它没有通过验证。
array(10) {
["_token"]=> string(40) "726lKBQgckGuLBxmJZ7Kjq4kzzXqADDqv3ZSnMOE"
["first_name"]=> string(3) "asd"
["last_name"]=> string(3) "asd"
["email"]=> string(14) "asdasd@asd.com"
["postal_code"]=> string(7) "XXX XXX"
["new_game_notification"]=> string(1) "1"
["timezone_id"]=> string(1) "5"
["password"]=> string(6) "asdasd"
["password_confirmation"]=> string(6) "asdasd"
["role"]=> string(7) "regular"
}
我在保存之前正在进行自己的密码哈希,但为了解决这个问题,我暂时将其删除了。
非常感谢任何建议或指导/指示。
答案 0 :(得分:5)
在保存之前,密码可能会被哈希...
检查热心的文件:
Route::post('register', function() {
$rules = array(
'name' => 'required|min:3|max:80|alpha_dash',
'email' => 'required|between:3,64|email|unique:users',
'password' => 'required|alpha_num|between:4,8|confirmed',
'password_confirmation' => 'required|alpha_num|between:4,8'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->passes()) {
User::create(array(
'name' => Input::get('name'),
'email' => Input::get('email'),
'password' => Hash::make(Input::get('password'))
));
return Redirect::to('/')->with('message', 'Thanks for registering!');
} else {
return Redirect::to('/')->withErrors($validator->getMessages());
}
}
);
<强>&#39;密码&#39; =&GT; &#39;需要| alpha_num |之间:4,8 |确认&#39;,强>
<强>&#39; password_confirmation&#39; =&GT; &#39;需要| alpha_num |之间:4,8&#39;,强>
答案 1 :(得分:3)
不是真的要求“password_confirm”处于可填充数组中,我有以下规则。
'old_password' => 'required|alphaNum|between:6,16',
'new_password' => 'required|alphaNum|between:6,16|confirmed',
'new_password_confirmation' => 'required|alpha_num|between:4,8'
在视图中我有三个具有相同名称的字段:
old_password
new_password
new_password_confirmation
它适用于我。
验证字段必须具有foo_confirmation
的匹配字段。例如,如果验证字段为password,则输入中必须存在匹配的password_confirmation字段。
答案 2 :(得分:2)
事实证明我找到了解决方案。
具有讽刺意味的是,pasword_confirmation需要在模型上设置为可填写,以便在Ardent上进行验证,以便能够查看并运行验证。
相当简单的解决方案,虽然没有真正记录,但如果数据库中没有字段,为什么要在模型的可填充数组中放置一个变量。
答案 3 :(得分:0)
有趣的是我的表单没有附加到模型上,因此您的解决方案不适用于我的情况。
在我的Laravel 4.2项目中,我遇到了完全相同的问题:我的密码和密码确认字段匹配,但我仍然收到错误消息,说我的密码确认不匹配。
我发现的是验证规则&#34;已确认&#34;和&#34;相同&#34;似乎发生了冲突。在阅读了文档并看到我真正需要的是&#34;相同&#34;后,我删除了#34; confimred&#34;从密码和XDebug步入。
这对我有用。基本上,你只需要一个
答案 4 :(得分:0)
在Laravel 4.2上有同样的验证错误。不想使用“相同”过滤器或用pw_confirmation设置“填充”数组。还忽略了在db中为密码定义字段的显式方法。如果有文件证明,它必须有效!
所以我的解决方案是:
public static $rules = array(
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6|max:20|confirmed'
);
,在控制器中:
public function registration() {
$input = Input::all();
$validation = Validator::make($input, User::$rules);
$input['password'] = Hash::make($input['password']);
// THIS does the trick
$input['password_confirmation'] = Hash::make($input['password_confirmation']);
if ($validation->passes())
{
User::create($input);
因此,在“pass()”方法之前,确认字段必须是密码,因为密码是。
答案 5 :(得分:0)
解决方案:只需在验证规则中添加变量“ password_confirmation”
就像:
$rules = ['password' => 'required|confirmed','password_confirmation'=>''];