试图修改Laravel中的Auth注册系统

时间:2016-09-29 22:32:27

标签: laravel

我试图修改Laravel中的身份验证系统。我想要做的是添加一个下拉列表,以便用户可以首次选择他们所在的国家/地区。每当我在下拉列表中添加并单击注册按钮时,我会收到此错误:

 QueryException in Connection.php line 761:
SQLSTATE[HY000]: General error: 1364 Field 'country_id' doesn't have a default value (SQL: insert into `users` (`name`, `email`, `password`, `updated_at`, `created_at`) values (Mandy, mandy@NBDC.com, $2y$10$2kC1tOr91OTy1y6VrtoupuwjhXQI7kKnE.N19aAG1uQOKnXwrR3dG, 2016-09-29 22:26:45, 2016-09-29 22:26:45))

为了尝试可以解决这个问题,我尝试覆盖RegisterController中的register方法。使用我添加的代码,它将用户添加到数据库,但它不会以任何方式授权用户。或者,我重定向到Auth系统附带的默认主页,但由于用户未登录,因此会重定向到登录页面。

我只是想知道是否有人对Auth系统进行过任何此类修改,如果你能在一个人做什么就能让我知道。

2 个答案:

答案 0 :(得分:0)

您想要的是身份验证而非授权。 register()方法由Illuminate\Foundation\Auth\RegistersUsers使用的RegisterController特征提供。它在此行中注册时进行用户身份验证:

$this->guard()->login($this->create($request->all()));

$request->all()传递给$this->create(),返回新创建的User实例,然后传递给$this->guard()->login()

要回答您的问题,您必须覆盖create()中的RegisterController方法以包含country_id,并确保返回User个实例。您可能还需要更新validator()方法以验证country_id

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
        'country_id' => 'required', // add validation rule
    ]);
}

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'country_id' => $data['country_id'], // include country_id
    ]);
}

确保您更新User型号的$fillable媒体资源,以包含country_id

答案 1 :(得分:0)

好的确有效。遗漏的是我拼错了country_id名称,它被设置为country,而不是create方法中的country_id。我想在我正在进行的大规模编码期间,我已经看过了。谢谢你的帮助。