Laravel 4密码确认似乎并不像我期望的那样

时间:2014-08-15 14:22:50

标签: authentication laravel-4 passwords eloquent

我的代码基于Laracasts.com上的视频。 Here is the video。我的想法是我可以使用该验证方法来创建用户。当我尝试确认密码时,无论如何它似乎都不匹配。我最初的想法是它在验证之前对密码进行哈希处理,导致它无论如何都会返回false。

到目前为止,这是我的所有代码。

用户模型

protected $fillable = ['username' ,'email', 'password'];

public static $rules = [
        'username' => 'required', 
        'email' => 'required|email', 
        'password' => 'required|confirmed'
];

public function isValid()
{
    $validation = Validator::make($this->attributes, static::$rules);

    if ($validation->passes()) return true;

    $this->errors = $validation->messages();
    return false;
}

UsersController @商店

public function store()
{
    $input = Input::all();

    if (! $this->user->fill($input)->isValid()) 
    { 
        return Redirect::back()->withInput()->withErrors($this->user->errors);
    }

    //if the user input is  valid then save it and assign associated role
    $this->user->save();
    $this->user->assignRole(Input::get('role'));

    return Redirect::to('/user')->with('flash_message', 'User added to the database!');
}

创建用户视图 - 表单

    {{ Form::open(['role' => 'form', 'route' => 'user.store']) }}
        <div class='form-group'>
            {{ Form::label('username', 'First Name') }}
            {{ Form::text('username', null, ['placeholder' => 'First Name', 'class' => 'form-control']) }}
        </div>
        <div class='form-group'>
            {{ Form::label('email', 'Email') }}
            {{ Form::text('email', null, ['placeholder' => 'Last Name', 'class' => 'form-control']) }}
        </div>
        <div class='form-group'>
            {{ Form::label('role', 'Role') }}
            {{ Form::select('role', $roles, "member", ['class' => 'form-control']) }}
        </div>
        <div class='form-group'>
            {{ Form::label('password', 'Password') }}
            {{ Form::password('password',  ['placeholder' => 'Password', 'class' => 'form-control']) }}
        </div>
        <div class='form-group'>
            {{ Form::label('password_confirmation', 'Password Confirm') }}
            {{ Form::password('password_confirmation',  ['placeholder' => 'Password Confirm', 'class' => 'form-control']) }}
        </div>
        <div class='form-group'>
            {{ Form::submit('Create User', ['class' => 'btn btn-primary']) }}
        </div>
        {{ Form::close() }}

1 个答案:

答案 0 :(得分:2)

正在发生的事情是,无论您输入什么内容,password_confirmation字段始终为空。

这是因为您在$this->user->fill($input)方法中使用store。但是,在您的模型中,您有

protected $fillable = ['username' ,'email', 'password']; 

所以,这永远不会填满password_confirmation字段。

如果您将fillable更改为以下内容,则应该没有问题

protected $fillable = ['username' ,'email', 'password', 'password_confirmation'];