2016-09-29 59 views
0

我试图修改Laravel中的身份验证系统。我想要做的是添加一个下拉列表,这样第一次用户可以选择一个他们居住的国家。每当我在下拉列表中添加并单击注册按钮时,我得到以下错误:试图修改Laravel中的Auth注册系统

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, [email protected], $2y$10$2kC1tOr91OTy1y6VrtoupuwjhXQI7kKnE.N19aAG1uQOKnXwrR3dG, 2016-09-29 22:26:45, 2016-09-29 22:26:45)) 

要尝试可以解决此问题,我试图覆盖RegisterController中的注册方法。通过我添加的代码,它将用户添加到数据库,但它不会授权用户。或者实例,我重定向到Auth系统附带的默认主页,但由于用户没有登录,它会重定向到登录页面。

我只是想知道有没有人对Auth系统做过任何这样的修改,如果你能告诉我一个怎么办。

+0

你的问题很混乱,不够清楚,无法检测到你真正想要达到的目标。如果您愿意将国家/地区ID添加到您的用户表中,则还需要将从下拉框中选择的值传递给查询。 – Franco

+0

@Franco所以这就是我想要做的,但我不知道如何去做。路由列表表明了RegisterController上的注册方法的行为,但是当您查看时,该方法不是列表。我环顾四周,但找不到方法的位置,以便我可以添加它。所以这正是我寻求帮助的方法。 – Kaley36

+0

你甚至在用户表中都没有国家字段。 –

回答

0

你想要的是认证而不是授权。 register()方法由Illuminate\Foundation\Auth\RegistersUsers性状提供,RegisterController使用该性状。它在登记时确实用户认证在这条线:

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

$request->all()被传递到$this->create()它返回一个新创建的User实例,然后将其传递给$this->guard()->login()

要回答您的问题,您必须覆盖您的RegisterController中的create()方法以包含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

+0

所以我尝试过,但没有奏效。我得到这个错误:QueryException在Connection.php行761: SQLSTATE [HY000]:一般错误:1364字段'country_id'没有默认值(SQL:insert into'users'('name','email' ,'password','updated_at','created_at')values(James,[email protected],$ 2y $ 10 $ 2pkY63OJB20fRI7gDietsurJ2NKpIQaWSoqGgI2JMVUGX4oo7MMay,2016-09-30 12:12:13,2016-09-30 12:12:13 )) – Kaley36

0

好吧,它确实工作。缺少的是我错过拼写country_id的名字,它在create方法中设置为country而不是country_id。我想,在我正在进行的大规模编码过程中,我看过了。谢谢您的帮助。