Laravel 在登录返回Token

2019-01-10  本文已影响0人  Invoker_M
    接着上一篇的 密文密码登录接口,我们需要在用户用户名密码验证成功的情况下,多返回一个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了。

上一篇下一篇

猜你喜欢

热点阅读