generated from muhtadeetaron/nextjs-template
fix(auth): fix fetch user info at login
This commit is contained in:
@ -46,7 +46,6 @@ interface AuthState {
|
||||
login: (form: LoginForm) => Promise<void>;
|
||||
register: (form: RegisterForm) => Promise<void>;
|
||||
setToken: (token: string | null) => void;
|
||||
fetchUser: () => Promise<void>;
|
||||
logout: () => void;
|
||||
initializeAuth: () => Promise<void>;
|
||||
}
|
||||
@ -78,9 +77,23 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||
throw new Error(data.message || "Login failed");
|
||||
}
|
||||
|
||||
setCookie("authToken", data.token);
|
||||
set({ token: data.token, isLoading: false });
|
||||
const token = data.token;
|
||||
setCookie("authToken", token);
|
||||
set({ token });
|
||||
|
||||
// Automatically fetch user info after login
|
||||
const userRes = await fetch(`${API_URL}/me/profile/`, {
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
});
|
||||
|
||||
if (!userRes.ok) {
|
||||
throw new Error("Failed to fetch user info after login");
|
||||
}
|
||||
|
||||
const userData: UserData = await userRes.json();
|
||||
set({ user: userData, isLoading: false });
|
||||
} catch (err: any) {
|
||||
console.error("Login error:", err);
|
||||
set({
|
||||
error: err?.message || "Login failed",
|
||||
isLoading: false,
|
||||
@ -88,6 +101,7 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
register: async (form: RegisterForm) => {
|
||||
set({ isLoading: true, error: null });
|
||||
try {
|
||||
@ -118,26 +132,6 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||
}
|
||||
},
|
||||
|
||||
fetchUser: async () => {
|
||||
const token = get().token;
|
||||
if (!token) return;
|
||||
|
||||
try {
|
||||
const res = await fetch(`${API_URL}/me/profile/`, {
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
});
|
||||
|
||||
if (!res.ok) throw new Error("Failed to fetch user info");
|
||||
|
||||
const data: UserData = await res.json();
|
||||
console.log(data);
|
||||
set({ user: data });
|
||||
} catch (err) {
|
||||
console.error("Error fetching user:", err);
|
||||
get().logout();
|
||||
}
|
||||
},
|
||||
|
||||
logout: () => {
|
||||
set({ token: null, user: null });
|
||||
setCookie("authToken", null);
|
||||
@ -147,7 +141,6 @@ export const useAuthStore = create<AuthState>((set, get) => ({
|
||||
const storedToken = getCookie("authToken");
|
||||
if (storedToken) {
|
||||
set({ token: storedToken });
|
||||
await get().fetchUser();
|
||||
}
|
||||
set({ isLoading: false, hydrated: true });
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user