今天繼續使用者登入的部分.
當接收到表單送來的資訊之後,
首先我們要針對資料作驗證.
app/Http/Controllers/UserAuthController.php新增signInProcess方法
//處理登入資料
public function signInProcess()
{
//接收輸入資料
$input = request()->all();
//驗證規則
$rules = [
//帳號(E-mail)
'account' => [
'required',
'max:50',
'email',
],
//密碼
'password' => [
'required',
'min:5',
],
];
//驗證資料
$validator = Validator::make($input, $rules);
if($validator->fails())
{
//資料驗證錯誤
return redirect('/user/auth/sign-up')
->withErrors($validator)
->withInput();
}
}
當輸入不符合規則的時候就會跳出錯誤訊息
檢查過表單輸入的格式之後,
就要去資料庫檢查看看有沒有這個使用者,
找到使用者之後,
再檢查看看密碼是否正確.
如果密碼正確,
就能完成登入的動作,
當密碼有錯時,
就需要告知使用者輸入的密碼有誤.
我們將signInProcess方法修改如下
//處理登入資料
public function signInProcess()
{
//前面省略
//取得使用者資料
$User = User::where('account', $input['account'])->first();
if(!$User)
{
//帳號錯誤回傳錯誤訊息
$error_message = [
'msg' => [
'帳號輸入錯誤',
],
];
return redirect('/user/auth/sign-in')
->withErrors($error_message)
->withInput();
}
//檢查密碼是否正確
$is_password_correct = Hash::check($input['password'], $User->password);
if(!$is_password_correct)
{
//密碼錯誤回傳錯誤訊息
$error_message = [
'msg' => [
'密碼輸入錯誤',
],
];
return redirect('/user/auth/sign-in')
->withErrors($error_message)
->withInput();
}
}
如果找不到使用者帳號,
就會顯示帳號輸入錯誤,
如果帳號正確但是密碼錯誤,
就會顯示密碼輸入錯誤.
我們使用ORM的方式,
取得的是Illuminate\Support\Collection;物件陣列或單一物件,
當使用first的時候,
如果從資料庫找不到資料就會回傳null,
當我們要取得$User底下的account欄位時,
我們可以用$User->account來取得,
其他欄位也是用同樣的方式,
能夠取得在繼承Model的物件中$fillable定義的所有欄位,
以及id、created_at和updated_at等欄位資料.
在這裡我們使用以下方法來驗證密碼
//檢查密碼是否正確
$is_password_correct = Hash::check($input['password'], $User->password);
因為密碼是經過加密,
而且這種加密方式每次結果可能會不同,
所以要透過特定的方法來做驗證,
當然Laravel已經幫我們寫好了,
我們只要使用Hash::check
函式就能夠完成密碼驗證的動作了.