Auth.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { createContext, useEffect, useMemo, useState } from 'react';
  2. import { MILVUS_ADDRESS } from '../consts/Localstorage';
  3. import { MilvusHttp } from '../http/Milvus';
  4. import { AuthContextType } from './Types';
  5. export const authContext = createContext<AuthContextType>({
  6. isAuth: false,
  7. address: '',
  8. setAddress: () => {},
  9. });
  10. const { Provider } = authContext;
  11. export const AuthProvider = (props: { children: React.ReactNode }) => {
  12. const [address, setAddress] = useState<string>(
  13. window.localStorage.getItem(MILVUS_ADDRESS) || ''
  14. );
  15. const isAuth = useMemo(() => !!address, [address]);
  16. useEffect(() => {
  17. const check = async () => {
  18. const milvusAddress = window.localStorage.getItem(MILVUS_ADDRESS) || '';
  19. try {
  20. const res = await MilvusHttp.check(milvusAddress);
  21. setAddress(res.data.connected ? milvusAddress : '');
  22. if (!res.data.connected) {
  23. window.localStorage.removeItem(MILVUS_ADDRESS);
  24. }
  25. } catch (error) {
  26. setAddress('');
  27. window.localStorage.removeItem(MILVUS_ADDRESS);
  28. }
  29. };
  30. check();
  31. }, [setAddress]);
  32. return (
  33. <Provider value={{ isAuth, address, setAddress }}>
  34. {props.children}
  35. </Provider>
  36. );
  37. };