| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import React, { createContext, useContext, useEffect, useState } from 'react';
- import { getToken } from '@/services/http';
- import { getUserInfo, UserInfo } from '@/services/user';
- interface AuthContextType {
- isLoggedIn: boolean;
- user: UserInfo | null;
- loading: boolean;
- refreshUser: () => Promise<void>;
- logout: () => void;
- }
- const AuthContext = createContext<AuthContextType>({
- isLoggedIn: false,
- user: null,
- loading: true,
- refreshUser: async () => {},
- logout: () => {},
- });
- export function AuthProvider({ children }: { children: React.ReactNode }) {
- const [user, setUser] = useState<UserInfo | null>(null);
- const [loading, setLoading] = useState(true);
- const refreshUser = async () => {
- try {
- const token = getToken();
- if (token) {
- const info = await getUserInfo();
- setUser(info);
- } else {
- setUser(null);
- }
- } catch (error) {
- console.error('获取用户信息失败:', error);
- setUser(null);
- }
- };
- const logout = () => {
- setUser(null);
- // 清除token在http服务中处理
- };
- useEffect(() => {
- const init = async () => {
- await refreshUser();
- setLoading(false);
- };
- init();
- }, []);
- return (
- <AuthContext.Provider
- value={{
- isLoggedIn: !!user,
- user,
- loading,
- refreshUser,
- logout,
- }}
- >
- {children}
- </AuthContext.Provider>
- );
- }
- export const useAuth = () => useContext(AuthContext);
|