diff --git a/es/components/user/login/index.js b/es/components/user/login/index.js index 90224e145..fd48729de 100644 --- a/es/components/user/login/index.js +++ b/es/components/user/login/index.js @@ -28,7 +28,7 @@ export default OakComponent({ onlyCaptcha: false, onlyPassword: false, disabled: '', - redirectUri: '', + redirectUri: '/wechatUser/login', url: '', callback: undefined, // 登录成功回调,排除微信登录方式 }, @@ -68,14 +68,16 @@ export default OakComponent({ appId = config2?.appId; isSupportWechatGrant = !!(isService && appId); isSupportWechat = !!config2?.passport?.includes('wechat'); - isSupportWechatPublic = !!config2?.passport?.includes('wechatPublic'); //是否开启 + isSupportWechatPublic = + !!config2?.passport?.includes('wechatPublic'); //是否开启 } else if (appType === 'web') { const config2 = config; appId = config2?.wechat?.appId; domain = config2?.wechat?.domain; isSupportWechat = !!config2?.passport?.includes('wechat'); - isSupportWechatPublic = !!config2?.passport?.includes('wechatPublic'); //是否开启 + isSupportWechatPublic = + !!config2?.passport?.includes('wechatPublic'); //是否开启 } if (isSupportWechatGrant) { loginMode = 1; diff --git a/es/components/user/login/web.js b/es/components/user/login/web.js index f58ef5dba..a5f939f54 100644 --- a/es/components/user/login/web.js +++ b/es/components/user/login/web.js @@ -20,6 +20,13 @@ export default function Render(props) { const validCaptcha = isCaptcha(captcha); const validPassword = isPassword(password); const allowSubmit = validMobile && (validCaptcha || validPassword); + let redirectUri2 = redirectUri; + if (!(redirectUri.startsWith('https') || redirectUri.startsWith('http'))) { + const hostname = domain || window.location.hostname; + const port = window.location.port ? `:${window.location.port}` : ''; + const path = redirectUri.startsWith('/') ? redirectUri : `/${redirectUri}`; + redirectUri2 = encodeURIComponent(`${window.location.protocol}//${hostname}${port}${path}`); + } const LoginPassword = (
} placeholder={t('placeholder.Mobile')} onChange={(e) => { @@ -132,7 +139,7 @@ export default function Render(props) { [Style['loginbox-bd__grant']]: isSupportWechatGrant, })}> {isSupportWechatGrant ? (
- +
) : (<>
{/* 因为在选择授权方式时,微信网站和微信公众号授权登录二者只存其一,所以这里可以按这个判断分开显示 */} - {isSupportWechat && ()} + {isSupportWechat && ()} {isSupportWechatPublic && ()}
)} diff --git a/src/components/user/login/index.ts b/src/components/user/login/index.ts index af2d9e55f..42df02f49 100644 --- a/src/components/user/login/index.ts +++ b/src/components/user/login/index.ts @@ -31,7 +31,7 @@ export default OakComponent({ onlyCaptcha: false, onlyPassword: false, disabled: '', - redirectUri: '', // 微信登录后的redirectUri,要指向wechatUser/login去处理 + redirectUri: '/wechatUser/login', // 微信登录后的redirectUri,要指向wechatUser/login去处理 url: '', // 登录系统之后要返回的页面 callback: undefined as (() => void) | undefined, // 登录成功回调,排除微信登录方式 }, @@ -79,13 +79,15 @@ export default OakComponent({ appId = config2?.appId; isSupportWechatGrant = !!(isService && appId); isSupportWechat = !!config2?.passport?.includes('wechat'); - isSupportWechatPublic = !!config2?.passport?.includes('wechatPublic'); //是否开启 + isSupportWechatPublic = + !!config2?.passport?.includes('wechatPublic'); //是否开启 } else if (appType === 'web') { const config2 = config as WebConfig; appId = config2?.wechat?.appId; domain = config2?.wechat?.domain; isSupportWechat = !!config2?.passport?.includes('wechat'); - isSupportWechatPublic = !!config2?.passport?.includes('wechatPublic'); //是否开启 + isSupportWechatPublic = + !!config2?.passport?.includes('wechatPublic'); //是否开启 } if (isSupportWechatGrant) { diff --git a/src/components/user/login/web.tsx b/src/components/user/login/web.tsx index 4ccfd2284..3db6916d6 100644 --- a/src/components/user/login/web.tsx +++ b/src/components/user/login/web.tsx @@ -85,6 +85,17 @@ export default function Render( const validPassword = isPassword(password); const allowSubmit = validMobile && (validCaptcha || validPassword); + let redirectUri2 = redirectUri; + if (!(redirectUri.startsWith('https') || redirectUri.startsWith('http'))) { + const hostname = domain || window.location.hostname; + const port = window.location.port ? `:${window.location.port}` : ''; + const path = redirectUri.startsWith('/') ? redirectUri : `/${redirectUri}`; + redirectUri2 = encodeURIComponent( + `${window.location.protocol}//${hostname}${port}${path}` + ); + } + + const LoginPassword = ( @@ -282,7 +293,7 @@ export default function Render( disableText={disabled} appId={appId} scope="snsapi_userinfo" - redirectUri={redirectUri} + redirectUri={redirectUri2} state={state} /> @@ -317,7 +328,7 @@ export default function Render( disableText={disabled} appId={appId} scope="snsapi_login" - redirectUri={redirectUri} + redirectUri={redirectUri2} state={state} /> )}