|
@@ -142,10 +142,53 @@ public class SocialUserServiceImpl implements SocialUserService {
|
|
|
null,userIds);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * 授权
|
|
|
+ * @param socialType 社交平台的类型 {@link SocialTypeEnum}
|
|
|
+ * @param userType 用户类型
|
|
|
+ * @param code 授权码
|
|
|
+ * @param state state
|
|
|
+ * @return 授权用户
|
|
|
+ */
|
|
|
public SocialUserDO authSocialUser(Integer socialType, Integer userType, String code, String state) {
|
|
|
- return this.authSocialUser(socialType, userType, code, state, false, false);
|
|
|
+
|
|
|
+
|
|
|
+ SocialUserDO socialUser = socialUserMapper.selectByTypeAndCodeAnState(socialType, code, state);
|
|
|
+ if (socialUser != null) {
|
|
|
+ return socialUser;
|
|
|
+ }
|
|
|
+
|
|
|
+ AuthUser authUser = socialClientService.getAuthUser(socialType, userType, code, state);
|
|
|
+ Assert.notNull(authUser, "三方用户不能为空");
|
|
|
+
|
|
|
+ return getSocialUserDO(socialType, code, state, socialUser, authUser);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * 获得社交用户
|
|
|
+ *
|
|
|
+ * @param socialType 社交平台的类型
|
|
|
+ * @param code 授权码
|
|
|
+ * @param state 授权 state
|
|
|
+ * @return 社交用户
|
|
|
+ */
|
|
|
+ @NotNull
|
|
|
+ private SocialUserDO getSocialUserDO(Integer socialType, String code, String state, SocialUserDO socialUser, AuthUser authUser) {
|
|
|
+ if (socialUser == null) {
|
|
|
+ socialUser = new SocialUserDO();
|
|
|
+ }
|
|
|
+ socialUser.setType(socialType).setCode(code).setState(state)
|
|
|
+ .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken())))
|
|
|
+ .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo()));
|
|
|
+ if (socialUser.getId() == null) {
|
|
|
+ socialUserMapper.insert(socialUser);
|
|
|
+ } else {
|
|
|
+ socialUserMapper.updateById(socialUser);
|
|
|
+ }
|
|
|
+ return socialUser;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
* 授权获得对应的社交用户
|
|
|
* 如果授权失败,则会抛出 {@link ServiceException} 异常
|
|
@@ -183,18 +226,7 @@ public class SocialUserServiceImpl implements SocialUserService {
|
|
|
stringRedisTemplate.opsForValue().set("auth_user:" + code, JsonUtils.toJsonString(authUser) , 60 * 10 , TimeUnit.SECONDS);
|
|
|
throw exception(AUTH_LOGIN_USER_IS_FIRST);
|
|
|
}
|
|
|
- if (socialUser == null) {
|
|
|
- socialUser = new SocialUserDO();
|
|
|
- }
|
|
|
- socialUser.setType(socialType).setCode(code).setState(state)
|
|
|
- .setOpenid(authUser.getUuid()).setToken(authUser.getToken().getAccessToken()).setRawTokenInfo((toJsonString(authUser.getToken())))
|
|
|
- .setNickname(authUser.getNickname()).setAvatar(authUser.getAvatar()).setRawUserInfo(toJsonString(authUser.getRawUserInfo()));
|
|
|
- if (socialUser.getId() == null) {
|
|
|
- socialUserMapper.insert(socialUser);
|
|
|
- } else {
|
|
|
- socialUserMapper.updateById(socialUser);
|
|
|
- }
|
|
|
- return socialUser;
|
|
|
+ return getSocialUserDO(socialType, code, state, socialUser, authUser);
|
|
|
}
|
|
|
|
|
|
|