diff --git a/open-isle-cli/src/main.js b/open-isle-cli/src/main.js index 0c560ff5d..0817f5a49 100644 --- a/open-isle-cli/src/main.js +++ b/open-isle-cli/src/main.js @@ -5,6 +5,7 @@ import './assets/global.css' import Toast, { POSITION } from 'vue-toastification' import 'vue-toastification/dist/index.css' import { useToast } from 'vue-toastification' +import { checkToken, clearToken } from './utils/auth' // Configurable API domain and port export const API_DOMAIN = 'http://127.0.0.1' @@ -16,3 +17,9 @@ const app = createApp(App) app.use(router) app.use(Toast, { position: POSITION.TOP_RIGHT }) app.mount('#app') + +checkToken().then(valid => { + if (!valid) { + clearToken() + } +}) diff --git a/open-isle-cli/src/utils/auth.js b/open-isle-cli/src/utils/auth.js new file mode 100644 index 000000000..519c06943 --- /dev/null +++ b/open-isle-cli/src/utils/auth.js @@ -0,0 +1,28 @@ +import { API_BASE_URL } from '../main' + +const TOKEN_KEY = 'token' + +export function getToken() { + return localStorage.getItem(TOKEN_KEY) +} + +export function setToken(token) { + localStorage.setItem(TOKEN_KEY, token) +} + +export function clearToken() { + localStorage.removeItem(TOKEN_KEY) +} + +export async function checkToken() { + const token = getToken() + if (!token) return false + try { + const res = await fetch(`${API_BASE_URL}/api/auth/check`, { + headers: { Authorization: `Bearer ${token}` } + }) + return res.ok + } catch (e) { + return false + } +} diff --git a/open-isle-cli/src/views/LoginPageView.vue b/open-isle-cli/src/views/LoginPageView.vue index a47421cca..2054144c5 100644 --- a/open-isle-cli/src/views/LoginPageView.vue +++ b/open-isle-cli/src/views/LoginPageView.vue @@ -56,6 +56,7 @@