add token in auth

This commit is contained in:
AmirHossein Mahmoodi
2025-08-13 09:22:49 +03:30
parent fada14f0dd
commit 10179dc726
3 changed files with 39 additions and 13 deletions

View File

@@ -6,6 +6,7 @@ import { createContext, useCallback, useContext, useEffect, useReducer, useState
const initAuth = {
initAuthState: false,
isAuth: false,
token: null,
user: {},
};
@@ -19,6 +20,12 @@ const authReducer = (state, action) => {
return { ...state, isAuth: action.isAuth };
case "CHANGE_INIT_AUTH":
return { ...state, initAuthState: action.initAuthState };
case "CLEAR_TOKEN":
localStorage.removeItem("_token");
return { ...state, token: null };
case "SET_TOKEN":
localStorage.setItem("_token", action.token);
return { ...state, token: action.token };
default:
return state;
}
@@ -46,7 +53,16 @@ export const AuthProvider = ({ children }) => {
dispatch({ type: "CHANGE_INIT_AUTH", initAuthState });
}, []);
const clearToken = useCallback(() => {
dispatch({ type: "CLEAR_TOKEN" });
}, []);
const setToken = useCallback((token) => {
dispatch({ type: "SET_TOKEN", token });
}, []);
const logout = () => {
clearToken()
clearUser();
changeAuthState(false);
changeInitAuth(true);
@@ -55,7 +71,7 @@ export const AuthProvider = ({ children }) => {
const getUser = useCallback(async () => {
try {
const { data } = await axios.get(GET_USER_ROUTE, {
withCredentials: true,
headers: { authorization: `Bearer ${state.token}` },
});
changeUser(data.data);
changeAuthState(true);
@@ -74,20 +90,33 @@ export const AuthProvider = ({ children }) => {
message: " مشکلی در احراز هویت رخ داده است . دقایقی بعد امتحان کنید!!!",
});
}
}, [clearUser, changeUser, changeAuthState, changeInitAuth]);
}, [state.token, clearUser, changeUser, changeAuthState, changeInitAuth]);
useEffect(() => {
getUser();
const localToken = localStorage.getItem("_token");
if (localToken) dispatch({ type: "SET_TOKEN", token: localToken });
}, []);
useEffect(() => {
if (!state.token) {
clearUser();
changeAuthState(false);
changeInitAuth(true);
return;
}
getUser();
}, [state.token]);
return (
<AuthContext.Provider
value={{
token: state.token,
user: state.user,
isAuth: state.isAuth,
initAuthState: state.initAuthState,
getUser,
logout,
setToken,
errorState,
}}
>