From 2abef3dc64c2923074709a17a309c7aea25103c5 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Sat, 4 Jul 2020 13:15:52 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E5=AE=8C=E6=88=90=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=85=AC=E4=BC=97=E5=B9=B3=E5=8F=B0=E7=9A=84=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=20scope?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth/enums/scope/AuthWechatMpScope.java | 45 +++++++++++++++++++ .../oauth/request/AuthWeChatMpRequest.java | 5 ++- 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/enums/scope/AuthWechatMpScope.java diff --git a/src/main/java/me/zhyd/oauth/enums/scope/AuthWechatMpScope.java b/src/main/java/me/zhyd/oauth/enums/scope/AuthWechatMpScope.java new file mode 100644 index 0000000..db0d606 --- /dev/null +++ b/src/main/java/me/zhyd/oauth/enums/scope/AuthWechatMpScope.java @@ -0,0 +1,45 @@ +package me.zhyd.oauth.enums.scope; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 微信公众平台 OAuth 授权范围 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @version 1.0.0 + * @since 1.0.0 + */ +@Getter +@AllArgsConstructor +public enum AuthWechatMpScope implements AuthScope { + /** + * {@code scope} 含义,以{@code description} 为准 + */ + SNSAPI_USERINFO("snsapi_userinfo", "弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息", true), + SNSAPI_BASE("snsapi_base", "不弹出授权页面,直接跳转,只能获取用户openid", false); + + private String scope; + private String description; + private boolean isDefault; + + public static List getDefaultScopes() { + AuthWechatMpScope[] scopes = AuthWechatMpScope.values(); + List defaultScopes = new ArrayList<>(); + for (AuthWechatMpScope scope : scopes) { + if (scope.isDefault()) { + defaultScopes.add(scope); + } + } + return defaultScopes; + } + + public static List listScope() { + return Arrays.stream(AuthWechatMpScope.values()).map(AuthWechatMpScope::getScope).collect(Collectors.toList()); + } +} diff --git a/src/main/java/me/zhyd/oauth/request/AuthWeChatMpRequest.java b/src/main/java/me/zhyd/oauth/request/AuthWeChatMpRequest.java index 8538b5d..af4adb1 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthWeChatMpRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthWeChatMpRequest.java @@ -1,18 +1,19 @@ package me.zhyd.oauth.request; import com.alibaba.fastjson.JSONObject; -import me.zhyd.oauth.utils.HttpUtils; 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.enums.scope.AuthWechatMpScope; 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.UrlBuilder; /** @@ -122,8 +123,8 @@ public class AuthWeChatMpRequest extends AuthDefaultRequest { .queryParam("appid", config.getClientId()) .queryParam("redirect_uri", GlobalAuthUtils.urlEncode(config.getRedirectUri())) .queryParam("response_type", "code") - .queryParam("scope", "snsapi_userinfo") .queryParam("state", getRealState(state).concat("#wechat_redirect")) + .queryParam("scope", this.getScopes(",", false, AuthWechatMpScope.getDefaultScopes())) .build(); } -- GitLab