今天继续使用者登入的部分.
登入资料验证
当接收到表单送来的资讯之后,
首先我们要针对资料作验证.
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(); }}
如果找不到使用者帐号,
就会显示帐号输入错误,
如果帐号正确但是密码错误,
就会显示密码输入错误.
取得Collection资料
我们使用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
函式就能够完成密码验证的动作了.