接著上一篇的 密文密碼登錄接口,我們需要在用戶用戶名密碼驗(yàn)證成功的情況下,多返回一個(gè)token 的字段。
這里使用JWT來(lái)實(shí)現(xiàn)token,比較方便簡(jiǎn)單。
關(guān)于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('用戶名或密碼錯(cuò)誤');
}
}
那么短信驗(yàn)證碼登錄與密碼登錄,大體邏輯相同,只是我為了使用Laravel自帶的attempt()方法 另外建立了一個(gè)驗(yàn)證模型
/*
* 驗(yàn)證碼登錄
* */
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('驗(yàn)證碼錯(cuò)誤');
}
}
這里在config/auth.php下添加了一個(gè)sms的驗(yàn)證入口
'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內(nèi)使用getAuthPassword()方法修改驗(yàn)證字段
public function getAuthPassword() {
return $this->capatcha_code;
}
這樣就可以同時(shí)通過(guò)短信驗(yàn)證碼與密碼進(jìn)行登錄并且分發(fā)token了。