You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 1.5 kB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { setSessionToken } from '@/access';
  2. import { loginByOauth2Req } from '@/services/auth';
  3. import { to } from '@/utils/promise';
  4. import { history, useModel, useSearchParams } from '@umijs/max';
  5. import { message } from 'antd';
  6. import { useCallback, useEffect } from 'react';
  7. import { flushSync } from 'react-dom';
  8. import styles from './index.less';
  9. function Authorize() {
  10. const { initialState, setInitialState } = useModel('@@initialState');
  11. const [searchParams] = useSearchParams();
  12. const code = searchParams.get('code');
  13. const redirect = searchParams.get('redirect');
  14. const fetchUserInfo = useCallback(async () => {
  15. const userInfo = await initialState?.fetchUserInfo?.();
  16. if (userInfo) {
  17. flushSync(() => {
  18. setInitialState((s) => ({
  19. ...s,
  20. currentUser: userInfo,
  21. }));
  22. });
  23. }
  24. }, [initialState, setInitialState]);
  25. // 登录
  26. const loginByOauth2 = useCallback(async () => {
  27. const params = {
  28. code,
  29. };
  30. const [res] = await to(loginByOauth2Req(params));
  31. if (res && res.data) {
  32. const { access_token, expires_in } = res.data;
  33. setSessionToken(access_token, access_token, expires_in);
  34. message.success('登录成功!');
  35. await fetchUserInfo();
  36. history.push(redirect || '/');
  37. }
  38. }, [fetchUserInfo, redirect, code]);
  39. useEffect(() => {
  40. loginByOauth2();
  41. }, [loginByOauth2]);
  42. return <div className={styles.container}></div>;
  43. }
  44. export default Authorize;