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