登录新姿势

扫码二维码获取验证码登录

只是把验证码的获取方式换成了二维码获取...感觉好弱智😂 😂 😂 😂 😂

file

后台生成验证码

这里我们在展示登录表单的时候,随机生成一个code,并用session()->flush()存储

public function showLoginForm ()
{
    if (url()->previous() !== config('app.url')) {
        session()->flash('redirect_uri', url()->previous());
    }
    $loginCode = rand(1, 99999);
    session()->flash('login-code', $loginCode);

    return view('auth.login', compact('loginCode'));
}

生成qrcode

这里我们用了一个laravel的,生成二维码的包

$ composer require simplesoftwareio/simple-qrcode
'providers' => [
//.....
SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class,
//.....
]
渲染二维码
<div class="form-group">
    <label for="password" class="col-md-4 control-label">请扫描二维码获取验证码</label>
    <div class="col-md-6 col-md-offset-4">
        {!! QrCode::size(300)->generate($loginCode) !!}
    </div>
</div>

登录校验

由于我这里用的是表单验证器

自定义rules,点击这查看LC的文档
php artisan make:rule Equality

这里我定义了一个用于判断表单值是否和$value值相等的验证器,不相等弹出$message

class Equality implements Rule
{
    protected $value;
    protected $message;

    public function __construct ($value, $message)
    {
        $this->value = $value;
        $this->message = $message;
    }
    public function passes ($attribute, $value)
    {
        return $this->value == $value;
    }

    public function message ()
    {
        return $this->message;
    }
}

在规则中调用


/**
 * Validate the user login request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required',
        'password' => 'required',
        'loginCode' => ['required','numeric',new Equality(session('login-code'),'验证码不正确')],//这里调用了上面定义的规则
    ],[
        "{$this->username()}.required"=>'用户名不能为空',
        "password.required"=>'密码不能为空',
        "loginCode.required"=>'请输入验证码',
        "loginCode.numeric"=>'验证码必须是数字'
    ]);
}

google验证器

等我学会了,再来写 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈~~~~~