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'];
//获取第三方用户信息
$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;
}
/**
* 通过邀请码搜索用户
*