From 99ef329325e336402c60e0696d1b49fee8f8447b Mon Sep 17 00:00:00 2001 From: Steve0x2a Date: Mon, 20 Dec 2021 20:21:12 +0800 Subject: [PATCH] feat: support mobile login with WeChat Official Accounts (#383) * fix: adjust the accessToken field Signed-off-by: 0x2a * fix: missing name and owner Signed-off-by: 0x2a * feat: support mobile login with WeChat Signed-off-by: 0x2a --- idp/wechat.go | 1 + web/src/ProviderEditPage.js | 2 +- web/src/auth/Provider.js | 10 +++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/idp/wechat.go b/idp/wechat.go index e845f21a..43642c3a 100644 --- a/idp/wechat.go +++ b/idp/wechat.go @@ -179,6 +179,7 @@ func (idp *WeChatIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) userInfo := UserInfo{ Id: id, + Username: wechatUserInfo.Nickname, DisplayName: wechatUserInfo.Nickname, AvatarUrl: wechatUserInfo.Headimgurl, } diff --git a/web/src/ProviderEditPage.js b/web/src/ProviderEditPage.js index 05b04d60..7440770c 100644 --- a/web/src/ProviderEditPage.js +++ b/web/src/ProviderEditPage.js @@ -257,7 +257,7 @@ class ProviderEditPage extends React.Component { - {this.state.provider.type === "WeCom" ? ( + {this.state.provider.type === "WeCom" || this.state.provider.type === "WeChat" ? ( {Setting.getLabel(i18next.t("provider:Method"), i18next.t("provider:Method - Tooltip"))} : diff --git a/web/src/auth/Provider.js b/web/src/auth/Provider.js index cb281364..3905681c 100644 --- a/web/src/auth/Provider.js +++ b/web/src/auth/Provider.js @@ -33,6 +33,8 @@ const authInfo = { WeChat: { scope: "snsapi_login", endpoint: "https://open.weixin.qq.com/connect/qrconnect", + slientScope: "snsapi_userinfo", + silentEndpoint: "https://open.weixin.qq.com/connect/oauth2/authorize" }, Facebook: { scope: "email,public_profile", @@ -198,7 +200,13 @@ export function getAuthUrl(application, provider, method) { } else if (provider.type === "QQ") { return `${endpoint}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}`; } else if (provider.type === "WeChat") { - return `${endpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}#wechat_redirect`; + if (provider.method === "Silent") { + return `${authInfo[provider.type].silentEndpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}&scope=${authInfo[provider.type].slientScope}&response_type=code#wechat_redirect`; + } else if (provider.method === "Normal") { + return `${endpoint}?appid=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}#wechat_redirect`; + } else { + return `https://error:not-supported-provider-method:${provider.method}`; + } } else if (provider.type === "Facebook") { return `${endpoint}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}`; } else if (provider.type === "DingTalk") {