[Day 30] 会员登入及登出(二)

今天继续使用者登入的部分.

登入资料验证

当接收到表单送来的资讯之後,
首先我们要针对资料作验证.

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();
    }
}

当输入不符合规则的时候就会跳出错误讯息
https://ithelp.ithome.com.tw/upload/images/20201002/20105694ulJO5LgeJ8.png

从资料库取得使用者资料

检查过表单输入的格式之後,
就要去资料库检查看看有没有这个使用者,
找到使用者之後,
再检查看看密码是否正确.
如果密码正确,
就能完成登入的动作,
当密码有错时,
就需要告知使用者输入的密码有误.

我们将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();
    }
}

如果找不到使用者帐号,
就会显示帐号输入错误,
如果帐号正确但是密码错误,
就会显示密码输入错误.
https://ithelp.ithome.com.tw/upload/images/20201002/20105694mqoBRurkoK.png

取得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函式就能够完成密码验证的动作了.


<<:  [Day 29] 会员登入及登出(一)

>>:  [Day 31] 会员登入及登出(三)

[Day 22]从零开始学习 JS 的连续-30 Days---阵列操作介绍 (下篇)

阵列操作介绍 (下篇) 介绍四种阵列运用: map filter find findlndex 3....

Day 27. 我要准时下班- Figma Plugin (下)

上一篇介绍了 plugin 是什麽、如何安装使用,以及推荐的插件。今天我们实际透过这些插件实作一个简...

建立第一个RESTful api server(实作篇)-3 (Day15)

接下来,我们目前开了两组的api的规范,紧接着就要在golang里面撰写实际的api了 以下为开设a...

Day 28 | Circular timer animation

今天要来分享我看 Youtube 影片做出来的 timer, 照惯例先放影片连结, 用他里面提到的观...

IT铁人DAY 19-Flyweight 享元模式

  一讲到Flyweight,它最主要工作就是要减少记忆体的使用量,至於要怎麽做来能达到这样的效果呢...