6
0
Fork 0

优化小程序登录

release
vine_liutk 2022-02-23 09:54:20 +08:00
parent aa74028ca2
commit 764efe86ad
1 changed files with 64 additions and 92 deletions

View File

@ -33,13 +33,18 @@ class SocialiteAuthController extends Controller
$code = $input['code']; $code = $input['code'];
//获取第三方用户信息 //获取第三方用户信息
$socialiteUser = $this->getSocialiteUserByCode($provider, $code); $socialite = $this->getSocialiteUserByCode($provider, $code);
//通过第三方用户信息登录已绑定账号 //通过第三方用户信息登录已绑定账号
$token = $this->loginUser([ $token = null;
'socialite_type'=>$provider, $socialiteUser = SocialiteUser::firstOrCreate([
'socialite_id'=>$socialiteUser?->id, 'socialite_type' => $provider,
], $request); 'socialite_id' => $socialite?->id,
]);
$user = $socialiteUser->user;
if ($user) {
$token = $this->loginUser($user, $request);
}
return response()->json([ return response()->json([
'token' => $token?->plainTextToken, 'token' => $token?->plainTextToken,
@ -61,13 +66,13 @@ class SocialiteAuthController extends Controller
'password' => ['bail', 'required', 'string'], 'password' => ['bail', 'required', 'string'],
]); ]);
break; break;
case 'sms_code'://手机号+验证码 case 'sms-code'://手机号+验证码
$rules = array_merge($rules, [ $rules = array_merge($rules, [
'phone' => ['bail', 'required', new PhoneNumberRule()], 'phone' => ['bail', 'required', new PhoneNumberRule()],
'verify_code' => ['bail', 'required', 'string'], 'verify_code' => ['bail', 'required', 'string'],
]); ]);
break; break;
case 'wechat_mini'://微信小程序解密手机号 case 'wechat-mini'://微信小程序解密手机号
$rules = array_merge($rules, [ $rules = array_merge($rules, [
'data' => ['bail', 'required', 'string'], 'data' => ['bail', 'required', 'string'],
'iv' => ['bail', 'required', 'string'], 'iv' => ['bail', 'required', 'string'],
@ -85,12 +90,12 @@ class SocialiteAuthController extends Controller
$code = $input['code']; $code = $input['code'];
//获取第三方用户信息 //获取第三方用户信息
$socialiteUser = $this->getSocialiteUserByCode($provider, $code); $socialite = $this->getSocialiteUserByCode($provider, $code);
//绑定用户并返回token //绑定用户并返回token
$token = $this->bindUser([ $token = $this->bindUser([
'socialite_type'=>$provider, 'socialite_type'=>$provider,
'socialite_id'=>$socialiteUser?->id, 'socialite_id'=>$socialite?->id,
], $type ?? 'default', $request); ], $type ?? 'default', $request);
return response()->json([ return response()->json([
@ -118,56 +123,11 @@ class SocialiteAuthController extends Controller
} }
/** /**
* 第三方登录现有绑定用户 * 第三方绑定用户
* *
* @param [array] $socialite * @param [array] $socialite
* @param [Request] $request * @param [Request] $request
*/ */
protected function loginUser(array $socialite, Request $request)
{
$token = null;
$socialiteUser = SocialiteUser::firstOrCreate($socialite);
$user = $socialiteUser->user;
if ($user) {
$user->last_login_at = now();
$user->last_login_ip = $request->realIp();
$user->save();
// 获取登录设备
$device = $request->header('client-app', Device::UNIAPP);
switch ($device) {
case Device::MERCHANT:
if ($user->userInfo?->agent_level < UserInfo::AGENT_LEVEL_VIP) {
throw new BizException('账户没有权限');
}
// 清理此用户的商户端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商户端令牌
$token = $user->createToken($device);
break;
case Device::DEALER:
if (!$user->isDealer()) {
throw new BizException('账户没有权限');
}
// 清理此用户的商户端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商户端令牌
$token = $user->createToken($device);
break;
default:
$device = Device::UNIAPP;
// 清理此用户的商城端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商城端令牌
$token = $user->createToken($device, ['mall']);
break;
}
}
return $token;
}
protected function bindUser(array $socialite, string $type, Request $request) protected function bindUser(array $socialite, string $type, Request $request)
{ {
$token = null; $token = null;
@ -219,46 +179,11 @@ class SocialiteAuthController extends Controller
//走登录逻辑 //走登录逻辑
if ($user) { if ($user) {
$user->last_login_at = now(); $token = $this->loginUser($user, $request);
$user->last_login_ip = $request->realIp();
$user->save();
// 获取登录设备
$device = $request->header('client-app', Device::UNIAPP);
switch ($device) {
case Device::MERCHANT:
if ($user->userInfo?->agent_level < UserInfo::AGENT_LEVEL_VIP) {
throw new BizException('账户没有权限');
}
// 清理此用户的商户端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商户端令牌
$token = $user->createToken($device);
break;
case Device::DEALER:
if (!$user->isDealer()) {
throw new BizException('账户没有权限');
}
// 清理此用户的商户端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商户端令牌
$token = $user->createToken($device);
break;
default:
$device = Device::UNIAPP;
// 清理此用户的商城端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商城端令牌
$token = $user->createToken($device, ['mall']);
break;
}
} else {//走注册逻辑 } else {//走注册逻辑
$time = now(); $time = now();
$ip = $request->realIp(); $ip = $request->realIp();
$inviter = $this->findUserByCode((string) Arr::get($input, 'code')); $inviter = $this->findUserByCode((string) Arr::get($input, 'inviter_code'));
try { try {
DB::beginTransaction(); DB::beginTransaction();
@ -305,6 +230,53 @@ class SocialiteAuthController extends Controller
return $token; return $token;
} }
/**
* 第三方登录现有绑定的用户
*
* @param [User] $user
* @param [Request] $request
*/
protected function loginUser(User $user, Request $request)
{
$token = null;
$user->last_login_at = now();
$user->last_login_ip = $request->realIp();
$user->save();
// 获取登录设备
$device = $request->header('client-app', Device::UNIAPP);
switch ($device) {
case Device::MERCHANT:
if ($user->userInfo?->agent_level < UserInfo::AGENT_LEVEL_VIP) {
throw new BizException('账户没有权限');
}
// 清理此用户的商户端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商户端令牌
$token = $user->createToken($device);
break;
case Device::DEALER:
if (!$user->isDealer()) {
throw new BizException('账户没有权限');
}
// 清理此用户的商户端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商户端令牌
$token = $user->createToken($device);
break;
default:
$device = Device::UNIAPP;
// 清理此用户的商城端令牌
$user->tokens()->where('name', $device)->delete();
// 颁发新的商城端令牌
$token = $user->createToken($device, ['mall']);
break;
}
return $token;
}
/** /**
* 通过邀请码搜索用户 * 通过邀请码搜索用户
* *