Basic userstore
This commit is contained in:
parent
f927cc916b
commit
88f36575fb
92
src/lib/userstore.ts
Normal file
92
src/lib/userstore.ts
Normal file
@ -0,0 +1,92 @@
|
||||
import { AuthService, OpenAPI, type ResponseAuth } from '@odit/lfk-client-js';
|
||||
import { writable } from 'svelte/store';
|
||||
|
||||
type UserState = {
|
||||
access_token: string;
|
||||
refresh_token: string;
|
||||
isLoggedIn: boolean;
|
||||
refreshInterval: number
|
||||
};
|
||||
|
||||
const userStore = () => {
|
||||
const state: UserState = {
|
||||
access_token: '',
|
||||
refresh_token: '',
|
||||
isLoggedIn: false,
|
||||
refreshInterval: 0
|
||||
};
|
||||
|
||||
const { subscribe, set, update } = writable(state);
|
||||
|
||||
const methods = {
|
||||
async login(resAuth: ResponseAuth) {
|
||||
update((state: UserState) => {
|
||||
if (!resAuth) {
|
||||
return state;
|
||||
}
|
||||
|
||||
state.access_token = resAuth.access_token;
|
||||
state.refresh_token = resAuth.refresh_token;
|
||||
state.isLoggedIn = true;
|
||||
state.refreshInterval = setInterval(() => {
|
||||
this.refreshAuth();
|
||||
}, 2 * 60000)
|
||||
|
||||
localStorage.setItem('userdata', JSON.stringify(state));
|
||||
localStorage.setItem('access_token', state.access_token);
|
||||
localStorage.setItem('refresh_token', state.refresh_token);
|
||||
return state;
|
||||
});
|
||||
},
|
||||
async refreshAuth() {
|
||||
try {
|
||||
const authRes = await AuthService.authControllerRefresh({ token: state.refresh_token }) as ResponseAuth;
|
||||
OpenAPI.TOKEN = authRes.access_token;
|
||||
} catch {
|
||||
this.logout();
|
||||
}
|
||||
},
|
||||
loginFromStorage() {
|
||||
console.log('loginFromStorage');
|
||||
const access_token = localStorage.getItem('token');
|
||||
if (!access_token) {
|
||||
throw new Error('Unauthorized');
|
||||
}
|
||||
|
||||
const storagedata = localStorage.getItem('userdata');
|
||||
const userdata = JSON.parse(storagedata || '{}') as UserState;
|
||||
|
||||
update((state: UserState) => {
|
||||
state.access_token = access_token;
|
||||
state.refresh_token = userdata.refresh_token;
|
||||
state.isLoggedIn = true;
|
||||
state.refreshInterval = setInterval(() => {
|
||||
this.refreshAuth();
|
||||
}, 2 * 60000);
|
||||
return state;
|
||||
});
|
||||
|
||||
this.refreshAuth
|
||||
},
|
||||
async logout() {
|
||||
update((state: UserState) => {
|
||||
state.isLoggedIn = false;
|
||||
state.access_token = '';
|
||||
state.refresh_token = '';
|
||||
state.refreshInterval = 0;
|
||||
localStorage.clear();
|
||||
return state;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
subscribe,
|
||||
set,
|
||||
update,
|
||||
state,
|
||||
...methods
|
||||
};
|
||||
};
|
||||
|
||||
export default userStore();
|
Loading…
x
Reference in New Issue
Block a user