add: full auth functionality
add: zustand auth store add: jwt auto refresh
This commit is contained in:
@@ -6,7 +6,8 @@ type User = {
|
||||
id: string
|
||||
name: string
|
||||
number: string
|
||||
token: string
|
||||
accessToken: string
|
||||
refreshToken: string
|
||||
}
|
||||
|
||||
type AuthStore = {
|
||||
@@ -14,6 +15,8 @@ type AuthStore = {
|
||||
isAuthenticated: boolean
|
||||
login: (userData: User) => void
|
||||
logout: () => void
|
||||
update: (userData: User) => void
|
||||
setToken: (token: string | null) => void;
|
||||
}
|
||||
|
||||
export const useAuthStore = create<AuthStore>()(
|
||||
@@ -25,12 +28,35 @@ export const useAuthStore = create<AuthStore>()(
|
||||
set(() => ({
|
||||
user: userData,
|
||||
isAuthenticated: true,
|
||||
})),
|
||||
}))
|
||||
,
|
||||
logout: () =>
|
||||
set(() => ({
|
||||
user: null,
|
||||
isAuthenticated: false,
|
||||
})),
|
||||
update: (userData) => {
|
||||
set((state) => {
|
||||
if (!state.user) return state; // no user to update
|
||||
return {
|
||||
user: {
|
||||
...state.user,
|
||||
...userData
|
||||
},
|
||||
};
|
||||
});
|
||||
},
|
||||
setToken: (token) => {
|
||||
set((state) => {
|
||||
if (!state.user) return state; // no user to update
|
||||
return {
|
||||
user: {
|
||||
...state.user,
|
||||
accessToken: token ?? '',
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
}),
|
||||
{
|
||||
name: 'auth-storage', // Key in localStorage
|
||||
Reference in New Issue
Block a user