| import authorizationUtil from '@/utils/authorization-util'; | |
| import { message } from 'antd'; | |
| import { useEffect, useMemo, useState } from 'react'; | |
| import { useNavigate, useSearchParams } from 'umi'; | |
| export const useLoginWithGithub = () => { | |
| const [currentQueryParameters, setSearchParams] = useSearchParams(); | |
| const error = currentQueryParameters.get('error'); | |
| const newQueryParameters: URLSearchParams = useMemo( | |
| () => new URLSearchParams(currentQueryParameters.toString()), | |
| [currentQueryParameters], | |
| ); | |
| const navigate = useNavigate(); | |
| if (error) { | |
| message.error(error); | |
| navigate('/login'); | |
| newQueryParameters.delete('error'); | |
| setSearchParams(newQueryParameters); | |
| return; | |
| } | |
| const auth = currentQueryParameters.get('auth'); | |
| if (auth) { | |
| authorizationUtil.setAuthorization(auth); | |
| newQueryParameters.delete('auth'); | |
| setSearchParams(newQueryParameters); | |
| } | |
| return auth; | |
| }; | |
| export const useAuth = () => { | |
| const auth = useLoginWithGithub(); | |
| const [isLogin, setIsLogin] = useState<Nullable<boolean>>(null); | |
| useEffect(() => { | |
| setIsLogin(!!authorizationUtil.getAuthorization() || !!auth); | |
| }, [auth]); | |
| return { isLogin }; | |
| }; | |