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

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import authorizationUtil from '@/utils/authorization-util';
  2. import { message } from 'antd';
  3. import { useEffect, useMemo, useState } from 'react';
  4. import { useNavigate, useSearchParams } from 'umi';
  5. export const useLoginWithGithub = () => {
  6. const [currentQueryParameters, setSearchParams] = useSearchParams();
  7. const error = currentQueryParameters.get('error');
  8. const newQueryParameters: URLSearchParams = useMemo(
  9. () => new URLSearchParams(currentQueryParameters.toString()),
  10. [currentQueryParameters],
  11. );
  12. const navigate = useNavigate();
  13. if (error) {
  14. message.error(error);
  15. navigate('/login');
  16. newQueryParameters.delete('error');
  17. setSearchParams(newQueryParameters);
  18. return;
  19. }
  20. const auth = currentQueryParameters.get('auth');
  21. if (auth) {
  22. authorizationUtil.setAuthorization(auth);
  23. newQueryParameters.delete('auth');
  24. setSearchParams(newQueryParameters);
  25. }
  26. return auth;
  27. };
  28. export const useAuth = () => {
  29. const auth = useLoginWithGithub();
  30. const [isLogin, setIsLogin] = useState<Nullable<boolean>>(null);
  31. useEffect(() => {
  32. setIsLogin(!!authorizationUtil.getAuthorization() || !!auth);
  33. }, [auth]);
  34. return { isLogin };
  35. };