Skip to content

Commit 45b265a

Browse files
Sso (#4235)
* feat: redirect url can be inner url (#4138) * fix: update new user sync api (#4145) * feat: post all params to backend (#4151) * pref: sso getauthurl api (#4172) * pref: sso getauthurl api * pref: sso * solve the rootorglist (#4234) --------- Co-authored-by: gggaaallleee <[email protected]>
1 parent 14febc4 commit 45b265a

File tree

7 files changed

+31
-52
lines changed

7 files changed

+31
-52
lines changed

packages/global/common/system/types/index.d.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,6 @@ export type FastGPTFeConfigsType = {
8484
github?: string;
8585
google?: string;
8686
wechat?: string;
87-
dingtalk?: string;
88-
wecom?: {
89-
corpid?: string;
90-
agentid?: string;
91-
};
9287
microsoft?: {
9388
clientId?: string;
9489
tenantId?: string;

packages/global/support/user/api.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ export type PostLoginProps = {
1212

1313
export type OauthLoginProps = {
1414
type: `${OAuthEnum}`;
15-
code: string;
1615
callbackUrl: string;
16+
props: Record<string, string>;
1717
} & TrackRegisterParams;
1818

1919
export type WxLoginProps = {

packages/global/support/user/constant.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,5 @@ export enum OAuthEnum {
1616
google = 'google',
1717
wechat = 'wechat',
1818
microsoft = 'microsoft',
19-
dingtalk = 'dingtalk',
20-
wecom = 'wecom',
2119
sso = 'sso'
2220
}

projects/app/src/pageComponents/account/team/OrgManage/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,11 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) {
9494

9595
const currentOrgs = useMemo(() => {
9696
if (orgs.length === 0) return [];
97-
// Auto select the first org(root org is team)
9897
if (parentPath === '') {
99-
setParentPath(getOrgChildrenPath(orgs[0]));
98+
const rootOrg = orgs.find((org) => org.path === '');
99+
if (rootOrg) {
100+
setParentPath(getOrgChildrenPath(rootOrg));
101+
}
100102
return [];
101103
}
102104

projects/app/src/pageComponents/login/LoginForm/FormLayout.tsx

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { checkIsWecomTerminal } from '@fastgpt/global/support/user/login/constan
1313
import { getNanoid } from '@fastgpt/global/common/string/tools';
1414
import Avatar from '@fastgpt/web/components/common/Avatar';
1515
import dynamic from 'next/dynamic';
16+
import { GET, POST } from '@/web/common/api/request';
1617

1718
interface Props {
1819
children: React.ReactNode;
@@ -48,8 +49,7 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => {
4849
{
4950
label: feConfigs.sso.title || 'Unknown',
5051
provider: OAuthEnum.sso,
51-
icon: feConfigs.sso.icon,
52-
redirectUrl: `${feConfigs.sso.url}/login/oauth/authorize?redirect_uri=${encodeURIComponent(redirectUri)}&state=${state.current}`
52+
icon: feConfigs.sso.icon
5353
}
5454
]
5555
: []),
@@ -63,16 +63,6 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => {
6363
}
6464
]
6565
: []),
66-
...(feConfigs?.oauth?.dingtalk
67-
? [
68-
{
69-
label: t('user:login.Dingtalk'),
70-
provider: OAuthEnum.dingtalk,
71-
icon: 'common/dingtalkFill',
72-
redirectUrl: `https://login.dingtalk.com/oauth2/auth?client_id=${feConfigs?.oauth?.dingtalk}&redirect_uri=${redirectUri}&state=${state.current}&response_type=code&scope=openid&prompt=consent`
73-
}
74-
]
75-
: []),
7666
...(feConfigs?.oauth?.google
7767
? [
7868
{
@@ -104,18 +94,6 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => {
10494
}
10595
]
10696
: []),
107-
...(feConfigs?.oauth?.wecom
108-
? [
109-
{
110-
label: t('login:wecom'),
111-
provider: OAuthEnum.wecom,
112-
icon: 'common/wecom',
113-
redirectUrl: isWecomWorkTerminal
114-
? `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${feConfigs?.oauth?.wecom?.corpid}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_privateinfo&agentid=${feConfigs?.oauth?.wecom?.agentid}&state=${state.current}#wechat_redirect`
115-
: `https://login.work.weixin.qq.com/wwlogin/sso/login?login_type=CorpApp&appid=${feConfigs?.oauth?.wecom?.corpid}&agentid=${feConfigs?.oauth?.wecom?.agentid}&redirect_uri=${redirectUri}&state=${state.current}`
116-
}
117-
]
118-
: []),
11997
...(pageType !== LoginPageTypeEnum.passwordLogin
12098
? [
12199
{
@@ -135,6 +113,19 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => {
135113

136114
const onClickOauth = useCallback(
137115
async (item: OAuthItem) => {
116+
if (item.provider === OAuthEnum.sso) {
117+
const redirectUrl = await POST<string>('/proApi/support/user/account/login/getAuthURL', {
118+
redirectUri,
119+
isWecomWorkTerminal
120+
});
121+
setLoginStore({
122+
provider: item.provider as OAuthEnum,
123+
lastRoute,
124+
state: state.current
125+
});
126+
router.replace(redirectUrl, '_self');
127+
return;
128+
}
138129
if (item.redirectUrl) {
139130
setLoginStore({
140131
provider: item.provider as OAuthEnum,
@@ -143,7 +134,6 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => {
143134
});
144135
router.replace(item.redirectUrl, '_self');
145136
}
146-
item.pageType && setPageType(item.pageType);
147137
},
148138
[lastRoute, router, setLoginStore, setPageType]
149139
);
@@ -152,14 +142,8 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => {
152142
useEffect(() => {
153143
if (rootLogin) return;
154144
const sso = oAuthList.find((item) => item.provider === OAuthEnum.sso);
155-
const wecom = oAuthList.find((item) => item.provider === OAuthEnum.wecom);
156-
if (feConfigs?.sso?.autoLogin && sso) {
157-
// sso auto
158-
onClickOauth(sso);
159-
} else if (isWecomWorkTerminal && wecom) {
160-
// Auto wecom login
161-
onClickOauth(wecom);
162-
}
145+
// sso auto login
146+
if (sso && (feConfigs?.sso?.autoLogin || isWecomWorkTerminal)) onClickOauth(sso);
163147
}, [rootLogin, feConfigs?.sso?.autoLogin, isWecomWorkTerminal, onClickOauth]);
164148

165149
return (

projects/app/src/pages/login/provider.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const provider = () => {
1919
const { initd, loginStore, setLoginStore } = useSystemStore();
2020
const { setUserInfo } = useUserStore();
2121
const router = useRouter();
22-
const { code, state, error } = router.query as { code: string; state: string; error?: string };
22+
const { state, error, ...props } = router.query as Record<string, string>;
2323
const { toast } = useToast();
2424

2525
const loginSuccess = useCallback(
@@ -31,12 +31,12 @@ const provider = () => {
3131
[setUserInfo, router, loginStore?.lastRoute]
3232
);
3333

34-
const authCode = useCallback(
35-
async (code: string) => {
34+
const authProps = useCallback(
35+
async (props: Record<string, string>) => {
3636
try {
3737
const res = await oauthLogin({
3838
type: loginStore?.provider || OAuthEnum.sso,
39-
code,
39+
props,
4040
callbackUrl: `${location.origin}/login/provider`,
4141
inviterId: localStorage.getItem('inviterId') || undefined,
4242
bd_vid: sessionStorage.getItem('bd_vid') || undefined,
@@ -86,8 +86,8 @@ const provider = () => {
8686
return;
8787
}
8888

89-
console.log('SSO', { initd, loginStore, code, state });
90-
if (!code || !initd) return;
89+
console.log('SSO', { initd, loginStore, props, state });
90+
if (!props || !initd) return;
9191

9292
if (isOauthLogging) return;
9393

@@ -107,10 +107,10 @@ const provider = () => {
107107
}, 1000);
108108
return;
109109
} else {
110-
authCode(code);
110+
authProps(props);
111111
}
112112
})();
113-
}, [initd, authCode, code, error, loginStore, loginStore?.state, router, state, t, toast]);
113+
}, [initd, authProps, error, loginStore, loginStore?.state, router, state, t, toast, props]);
114114

115115
return <Loading />;
116116
};

projects/app/src/web/support/user/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export const getCaptchaPic = (username: string) =>
9696
captchaImage: string;
9797
}>('/proApi/support/user/account/captcha/getImgCaptcha', { username });
9898

99-
export const postSyncMembers = () => POST('/proApi/support/user/team/org/sync');
99+
export const postSyncMembers = () => POST('/proApi/support/user/sync');
100100

101101
export const GetSearchUserGroupOrg = (
102102
searchKey: string,

0 commit comments

Comments
 (0)