美文网首页
Laravel 在登录返回Token

Laravel 在登录返回Token

作者: Invoker_M | 来源:发表于2019-01-10 14:56 被阅读0次
        接着上一篇的 密文密码登录接口,我们需要在用户用户名密码验证成功的情况下,多返回一个token 的字段。
    

    这里使用JWT来实现token,比较方便简单。
    关于JWT的引入以及配置可以查看这篇文章,里面有Laravel接入JWT的全面方法,照做即可。

    方法最后变成

    
     /*
         * 密码登录
         * */
        public  function  pwdLogin(PwdLoginRequest $pwdLoginRequest){
    
            $password = Crypt::decrypt($pwdLoginRequest['password'],false);
    
            $phone = $pwdLoginRequest['phone'];
            //此处加入了token
            if ($token = auth('api')->attempt(['phone' => $phone,'password' => $password])) {
                $user_info = Users::where('phone', $phone)->first()->toarray();
                $user_info['token'] = $token;
                return $this->success($user_info);
            }else{
                return $this->failed('用户名或密码错误');
            }
        }
    

    那么短信验证码登录与密码登录,大体逻辑相同,只是我为了使用Laravel自带的attempt()方法 另外建立了一个验证模型

    /*
         * 验证码登录
         * */
        public function smsLogin(CodeService $codeService,CaptchaGetRequest $request){
            $phone = $request['phone'];
            $code = $request['code'];
            
            $token = auth('sms')->attempt(['phone' => $phone,'password' => $code]);
            if ($token && $codeService->checkCode($request['phone'],$request['code'])) {
                $user_info = Users::where('phone', $request->get('phone'))->first()->toarray();
                $user_info['token'] = $token;
                return $this->success($user_info);
            }else{
                return $this->failed('验证码错误');
            }
        }
    

    这里在config/auth.php下添加了一个sms的验证入口

    
        'guards' => [
            'web' => [
                'driver' => 'session',
                'provider' => 'users',
            ],
    
            'api' => [
    //            'driver' => 'token',
                'driver' => 'jwt',
                'provider' => 'users',
            ],
    
            'sms' => [
                'driver' => 'jwt',
                'provider' => 'userSms',
            ]
        ],
    'providers' => [
            'users' => [
                'driver' => 'eloquent',
                'model' => App\Models\Users::class,
            ],
    
            'userSms' => [
                'driver' => 'eloquent',
                'model' => App\Models\UserSms::class,
            ],
    

    在UserSms.php内使用getAuthPassword()方法修改验证字段

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

    这样就可以同时通过短信验证码与密码进行登录并且分发token了。

    相关文章

      网友评论

          本文标题:Laravel 在登录返回Token

          本文链接:https://www.haomeiwen.com/subject/ycwslqtx.html