2016-09-29 58 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。我想,在我正在進行的大規模編碼過程中,我看過了。謝謝您的幫助。