优化小程序登录
parent
aa74028ca2
commit
764efe86ad
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过邀请码搜索用户
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue