mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-06 03:20:13 +08:00
* extract icon library from main.js * extract router from main.js * failure with error in passport * add example to swagger
48 lines
1017 B
JavaScript
48 lines
1017 B
JavaScript
import { computed, ref, watch } from 'vue'
|
|
import api, { setToken } from './api'
|
|
|
|
const TOKEN_KEY = 'JWT_TOKEN'
|
|
|
|
const myStorage = window.localStorage
|
|
const myToken = ref(myStorage.getItem(TOKEN_KEY))
|
|
|
|
if (myToken.value) {
|
|
setToken(myToken.value)
|
|
}
|
|
|
|
// watch the token and store it in localStorage
|
|
watch(myToken, (newToken) => {
|
|
if (newToken) {
|
|
console.log('update token:', newToken)
|
|
myStorage.setItem(TOKEN_KEY, newToken)
|
|
setToken(newToken)
|
|
} else {
|
|
myStorage.removeItem(TOKEN_KEY)
|
|
setToken(null)
|
|
}
|
|
})
|
|
|
|
export const getToken = () => {
|
|
return myToken.value
|
|
}
|
|
|
|
export const login = async (username, password) => {
|
|
try {
|
|
const res = await api.post('/auth/login', { username, password })
|
|
const { token } = res.data
|
|
myToken.value = token
|
|
return true
|
|
} catch (err) {
|
|
if (err.response?.status === 401) {
|
|
return false
|
|
}
|
|
throw err
|
|
}
|
|
}
|
|
|
|
export const logout = () => {
|
|
myToken.value = null
|
|
}
|
|
|
|
export const isAuthenticated = computed(() => !!myToken.value)
|