diff --git a/CHANGELOGS.md b/CHANGELOGS.md index 913169ad70c6b56913da01a5c73c52964901faf5..353bd45ff66134cf19f5d9d4bb278db58b76a2b4 100644 --- a/CHANGELOGS.md +++ b/CHANGELOGS.md @@ -2,11 +2,12 @@ ### 2021/6/3 -- 发布 v1.16.1 +- 发布 v1.16.2 - 新增 - 集成“程序员客栈”平台登录 - 修改 - 更新文档 + - 修复“淘宝”平台授权登录后没有`uid`的问题、增加刷新token的功能 ## 1.16.1 diff --git a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java index 92505aae857147b95399298f1590954901bb12d4..dc65a5496e69a5469726f409f7da2c6fa345af3d 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthTaobaoRequest.java @@ -4,12 +4,16 @@ import com.alibaba.fastjson.JSONObject; import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthDefaultSource; +import me.zhyd.oauth.enums.AuthResponseStatus; import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.utils.GlobalAuthUtils; +import me.zhyd.oauth.utils.HttpUtils; +import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; /** @@ -33,6 +37,26 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { return AuthToken.builder().accessCode(authCallback.getCode()).build(); } + private AuthToken getAuthToken(JSONObject object) { + this.checkResponse(object); + + return AuthToken.builder() + .accessToken(object.getString("access_token")) + .expireIn(object.getIntValue("expires_in")) + .tokenType(object.getString("token_type")) + .idToken(object.getString("id_token")) + .refreshToken(object.getString("refresh_token")) + .uid(object.getString("taobao_user_id")) + .openId(object.getString("taobao_open_uid")) + .build(); + } + + private void checkResponse(JSONObject object) { + if (object.containsKey("error")) { + throw new AuthException(object.getString("error_description")); + } + } + @Override protected AuthUser getUserInfo(AuthToken authToken) { String response = doPostAuthorizationCode(authToken.getAccessCode()); @@ -40,16 +64,12 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { if (accessTokenObject.containsKey("error")) { throw new AuthException(accessTokenObject.getString("error_description")); } - authToken.setAccessToken(accessTokenObject.getString("access_token")); - authToken.setRefreshToken(accessTokenObject.getString("refresh_token")); - authToken.setExpireIn(accessTokenObject.getIntValue("expires_in")); - authToken.setUid(accessTokenObject.getString("taobao_user_id")); - authToken.setOpenId(accessTokenObject.getString("taobao_open_uid")); + authToken = this.getAuthToken(accessTokenObject); String nick = GlobalAuthUtils.urlDecode(accessTokenObject.getString("taobao_user_nick")); return AuthUser.builder() - .rawUserInfo(new JSONObject()) - .uuid(accessTokenObject.getString("taobao_user_id")) + .rawUserInfo(accessTokenObject) + .uuid(StringUtils.isEmpty(authToken.getUid()) ? authToken.getOpenId() : authToken.getUid()) .username(nick) .nickname(nick) .gender(AuthUserGender.UNKNOWN) @@ -58,6 +78,17 @@ public class AuthTaobaoRequest extends AuthDefaultRequest { .build(); } + @Override + public AuthResponse refresh(AuthToken oldToken) { + String tokenUrl = refreshTokenUrl(oldToken.getRefreshToken()); + String response = new HttpUtils(config.getHttpConfig()).post(tokenUrl); + JSONObject accessTokenObject = JSONObject.parseObject(response); + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(this.getAuthToken(accessTokenObject)) + .build(); + } + /** * 返回带{@code state}参数的授权url,授权回调时会带上这个{@code state} *