feat: add login in frontend

* extract icon library from main.js
* extract router from main.js
* failure with error in passport
* add example to swagger
This commit is contained in:
Lin, Hung-Shin committed 2023-09-13 14:02:28 +08:00
1 parent b55b7aa1ec
commit 49417c405a
11 files changed
+206 -61

No files matched your search

+11
View File
@@ -2,6 +2,17 @@ import axios from 'axios'
const api = axios.create({
baseURL: '/api/v1',
headers: {
'Content-Type': 'application/json',
},
})
export const setToken = (token) => {
if (token) {
api.defaults.headers.common.Authorization = `Bearer ${token}`
} else {
delete api.defaults.headers.common.Authorization
}
}
export default api
+47
View File
@@ -0,0 +1,47 @@
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)
+5
View File
@@ -1,5 +1,7 @@
import io from 'socket.io-client'
import { getToken } from './auth'
class SocketWrapper {
constructor() {
this.socket = null
@@ -16,6 +18,9 @@ class SocketWrapper {
query: {
session_id: session._id,
},
auth: {
token: getToken(),
},
})
this.socket.on('connect', () => {