我试图修改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系统进行过任何此类修改,如果你能在一个人做什么就能让我知道。
答案 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。我想在我正在进行的大规模编码期间,我已经看过了。谢谢你的帮助。