Я пытаюсь создать AuthStore с MobX для SPA с Django бэкэндом Rest Framework. Я не могу найти способ сохранить профиль, не перезагружая его каждый раз.
Идея состоит в том, что каждый раз, когда вызывается authStore, он проверяет наличие токена в localStore, который затем проверяет дату истечения срока действия сам знак. Токен создается с использованием Django Rest Framework.
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно определить профиль, чтобы я мог установить его и сделать его видимым. Однако каждый раз, когда я его назначаю, он должен быть пустым.
Есть идеи?
import { toJS, decorate, observable, computed } from "mobx";
import jwt_decode from "jwt-decode";
import axios from "axios";
export const instance = axios.create({ baseURL: "http://localhost:8001" });
class AuthStore {
loggedIn = false;
profile = {};
fetchProfile = () =>
new Promise((resolve, reject) => {
instance
.get("users/details/")
.then((res) => {
this.profile = res.data;
console.log(toJS(this.profile));
resolve(res);
})
.catch((e) => reject(e));
});
setToken = (token) =>
new Promise((resolve, reject) => {
if (token) {
instance.defaults.headers.common["Authorization"] = `Bearer ${token}`;
localStorage.setItem("knowKuwait", token);
this.fetchProfile()
.then((res) => {
this.loggedIn = true;
resolve(res);
})
.catch((e) => reject(e));
} else {
try {
this.loggedIn = false;
this.profile = {};
delete instance.defaults.headers.common["Authorization"];
localStorage.removeItem("knowKuwait");
resolve();
} catch (e) {
reject(e);
}
}
});
checkForToken = () => {
const token = localStorage.getItem("knowKuwait");
if (token) {
const currentTime = Date.now() / 1000;
const jwt = jwt_decode(token);
if (jwt.exp >= currentTime) {
this.setToken(token);
} else {
this.logout();
}
}
};
}
decorate(AuthStore, {
loggedIn: observable,
profile: observable,
});
const authStore = new AuthStore();
authStore.checkForToken();
export default authStore;