diff --git a/src/stores/Auth.js b/src/stores/Auth.js index 765c61c..e248a6e 100644 --- a/src/stores/Auth.js +++ b/src/stores/Auth.js @@ -3,11 +3,14 @@ import { fetchJSON, postForm } from '@/utils/request'; import { HT_HOST } from "@/config"; import { prepareUrl } from '@/utils/commons'; +const KEY_LOGIN_TOKEN = 'KEY_LOGIN_TOKEN'; + class Auth { constructor(root) { makeAutoObservable(this, { rootStore: false }); this.root = root; + this.login.token = root.getSession(KEY_LOGIN_TOKEN); } valdateUserPassword(usr, pwd) { @@ -20,6 +23,7 @@ class Auth { .then(json => { if (json.errcode == 0) { this.login.token = json.Result.token; + this.root.putSession(KEY_LOGIN_TOKEN, json.Result.token); return json.Result.WU_LMI_SN; } else { throw new Error(json.errmsg + ': ' + json.errcode); @@ -71,7 +75,7 @@ class Auth { } login = { - token: '249FC25C949B4BB182431F89762AE5E8', + token: '',//'249FC25C949B4BB182431F89762AE5E8', userId: 1, // LMI_SN username: 'Vu Xuan Giang', travelAgencyId: 32531, // VEI_SN diff --git a/src/stores/Root.js b/src/stores/Root.js index 0907e7b..a1642ed 100644 --- a/src/stores/Root.js +++ b/src/stores/Root.js @@ -14,6 +14,25 @@ class Root { this.invoiceStore = new Invoice(this); makeAutoObservable(this); } + + getSession(key) { + if (window.sessionStorage) { + const sessionStorage = window.sessionStorage; + return sessionStorage.getItem(key); + } else { + console.error('browser not support sessionStorage!'); + return null; + } + } + + putSession(key, value) { + if (window.sessionStorage) { + const sessionStorage = window.sessionStorage; + return sessionStorage.setItem(key, value); + } else { + console.error('browser not support sessionStorage!'); + } + } } export default Root; \ No newline at end of file diff --git a/src/views/App.jsx b/src/views/App.jsx index 9f18497..f26a43d 100644 --- a/src/views/App.jsx +++ b/src/views/App.jsx @@ -1,10 +1,12 @@ -import { Outlet, Link, useHref, useLocation, NavLink } from "react-router-dom"; +import { Outlet, Link, useHref, useNavigate, NavLink } from "react-router-dom"; import { useEffect } from "react"; import { observer } from "mobx-react"; +import { toJS } from "mobx"; import { Layout, Menu, ConfigProvider, theme, Dropdown, Space, Row, Col, Badge, Typography, Divider, App as AntApp } from "antd"; import { DownOutlined } from "@ant-design/icons"; import "antd/dist/reset.css"; import AppLogo from "@/assets/logo-gh.png"; +import { isEmpty } from "@/utils/commons"; import { useStore } from "@/stores/StoreContext.js"; const { Header, Content, Footer } = Layout; @@ -27,13 +29,20 @@ const items = [ key: "3", }, ]; + function App() { const { authStore, noticeStore } = useStore(); + const { login } = authStore; const { noticeUnRead } = noticeStore; const href = useHref(); + const loginToken = toJS(login).token; + const navigate = useNavigate(); useEffect(() => { // Check location - console.info("href: " + href); + console.info("href: " + href + '; login.token: ' + loginToken); + if (href !== '/login' && isEmpty(loginToken)) { + // navigate('/login'); + } }, [href]); const splitPath = href.split("/");