【问题标题】:laravel eloquent error in saving passwordlaravel eloquent 保存密码错误
【发布时间】:2015-03-21 20:27:04
【问题描述】:

我正在尝试学习如何使用 Laravel,直到现在我还没有遇到任何问题。 然后我尝试实现一个Authentication的例子。

1) 我创建了一个迁移文件,在其中设置了用户表(密码设置为 60,令牌设置为 100,按照 laravel 网站上的说明)

2) 我使用播种机生成虚假用户:

$faker = Faker::create();

        foreach(range(1, 10) as $index)
        {
            User::create([
                'firstname' => $faker->firstName(),
                'lastname'  => $faker->lastName(),
                'email'     => $faker->email(),
                'password'  => Hash::make('password'),
                'telephone' => $faker->phoneNumber(),
                'admin'     => rand(0,1)
            ]);
        }

数据库中的表完全没有问题。

3) 我创建了一个具有以下功能的控制器 UserController

公共函数 postCreate() { $validator = Validator::make($data = Input::all(), User::$rules);

if ($validator->fails()) {
    return Redirect::to('users/newaccount')->with('message','error')->withInput()->withErrors($validator);
}

unset($data['password_confirmation']);
$data['password'] = Hash::make(Input::get('password'));
User::create($data);

return Redirect::to('users/signin')->with('message','thanks');

}

4) 我创建了一个用于注册用户的表单

{{ Form::open(array('route'=>array('users.createaccount'), 'method' => 'post')) }}
        .....
            {{ Form::label('password') }}
            {{ Form::password('password') }}
        ....
        {{ Form::submit('Create new account') }}
        {{ Form::close() }}

问题是当我检查数据库表时,用户已注册并保存,并且除了密码(以及保持为空的令牌)之外的所有字段都已填写。

但如果我在调用 User::create($data) 之前执行 dd($data),这就是我可以看到的:

array(6) { ["_token"]=> string(40) "5bSkWYHLfeBh8E2agiB15J2cQSzs6orI7m5ruFhx" ["firstname"]=> string(4) "mark" ["lastname"]=> string(4) "mark" ["email"]=> string(13) "mark@mark.com" ["password"]=> string(60) "$2y$10$J3eM3nBZ0l8eNa1BxpoDc.BzeQUKzTc7dwwbu7g7GdQLj4gJgjWxe" ["telephone"]=> string(8) "12345678" }

任何人都可以告诉我为什么只有密码和令牌字段没有使用 Eloquent 方法保存在数据库中,而使用播种器保存?

thk

【问题讨论】:

  • password 是否存在于 $fillable 数组中?
  • uuuuuu .....是的,没错...就是这样,...我还必须在可填充数组中设置令牌吗?...(我如何投票回答?)

标签: authentication laravel eloquent


【解决方案1】:

您要传递给create 的所有字段都需要在$fillable 数组中定义。还有password

protected $fillable = array('firstname', 'lastname', 'email', 'password', 'telephone', 'admin');
                                                                  ^^

_token 绝对不需要在那里。这只是 Laravel 为 CSRF protection 添加的令牌

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 2018-04-05
    • 1970-01-01
    • 2014-09-05
    • 2015-09-06
    • 1970-01-01
    • 2016-05-11
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多