diff --git a/app/Endpoint/Api/Http/Controllers/Auth/SocialiteAuthController.php b/app/Endpoint/Api/Http/Controllers/Auth/SocialiteAuthController.php index b63dad84..4ec9ca48 100644 --- a/app/Endpoint/Api/Http/Controllers/Auth/SocialiteAuthController.php +++ b/app/Endpoint/Api/Http/Controllers/Auth/SocialiteAuthController.php @@ -33,13 +33,18 @@ class SocialiteAuthController extends Controller $code = $input['code']; //获取第三方用户信息 - $socialiteUser = $this->getSocialiteUserByCode($provider, $code); + $socialite = $this->getSocialiteUserByCode($provider, $code); //通过第三方用户信息登录已绑定账号 - $token = $this->loginUser([ - 'socialite_type'=>$provider, - 'socialite_id'=>$socialiteUser?->id, - ], $request); + $token = null; + $socialiteUser = SocialiteUser::firstOrCreate([ + 'socialite_type' => $provider, + 'socialite_id' => $socialite?->id, + ]); + $user = $socialiteUser->user; + if ($user) { + $token = $this->loginUser($user, $request); + } return response()->json([ 'token' => $token?->plainTextToken, @@ -61,13 +66,13 @@ class SocialiteAuthController extends Controller 'password' => ['bail', 'required', 'string'], ]); break; - case 'sms_code'://手机号+验证码 + case 'sms-code'://手机号+验证码 $rules = array_merge($rules, [ 'phone' => ['bail', 'required', new PhoneNumberRule()], 'verify_code' => ['bail', 'required', 'string'], ]); break; - case 'wechat_mini'://微信小程序解密手机号 + case 'wechat-mini'://微信小程序解密手机号 $rules = array_merge($rules, [ 'data' => ['bail', 'required', 'string'], 'iv' => ['bail', 'required', 'string'], @@ -85,12 +90,12 @@ class SocialiteAuthController extends Controller $code = $input['code']; //获取第三方用户信息 - $socialiteUser = $this->getSocialiteUserByCode($provider, $code); + $socialite = $this->getSocialiteUserByCode($provider, $code); //绑定用户,并返回token $token = $this->bindUser([ 'socialite_type'=>$provider, - 'socialite_id'=>$socialiteUser?->id, + 'socialite_id'=>$socialite?->id, ], $type ?? 'default', $request); return response()->json([ @@ -118,56 +123,11 @@ class SocialiteAuthController extends Controller } /** - * 第三方登录现有绑定的用户 + * 第三方绑定用户 * * @param [array] $socialite * @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) { $token = null; @@ -219,46 +179,11 @@ class SocialiteAuthController extends Controller //走登录逻辑 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; - } + $token = $this->loginUser($user, $request); } else {//走注册逻辑 $time = now(); $ip = $request->realIp(); - $inviter = $this->findUserByCode((string) Arr::get($input, 'code')); + $inviter = $this->findUserByCode((string) Arr::get($input, 'inviter_code')); try { DB::beginTransaction(); @@ -305,6 +230,53 @@ class SocialiteAuthController extends Controller 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; + } + /** * 通过邀请码搜索用户 *