diff --git a/api/src/features/CorsFeature.kt b/api/src/features/CorsFeature.kt index 04484be..85af273 100644 --- a/api/src/features/CorsFeature.kt +++ b/api/src/features/CorsFeature.kt @@ -9,5 +9,6 @@ fun Application.corsFeature() { install(CORS) { anyHost() header(HttpHeaders.ContentType) + header(HttpHeaders.Authorization) } } \ No newline at end of file diff --git a/web/src/api/index.js b/web/src/api/index.js index e8c1751..33e07e1 100644 --- a/web/src/api/index.js +++ b/web/src/api/index.js @@ -1,9 +1,27 @@ import axios from 'axios' +import {mapState} from "vuex"; -export default axios.create({ + +const state = mapState(['token']) + +const Api = axios.create({ baseURL: 'http://localhost:8081', timeout: 4000, headers: { 'Content-Type': 'application/json' } }) + +axios.interceptors.request.use( + config => { + const token = state.token; + if (token) { + config.headers['Authorization'] = 'Bearer ' + token; + } + return config; + }, + error => { + Promise.reject(error) + }); + +export default Api \ No newline at end of file diff --git a/web/src/jwt/index.js b/web/src/jwt/index.js new file mode 100644 index 0000000..72a0b9f --- /dev/null +++ b/web/src/jwt/index.js @@ -0,0 +1,20 @@ +import Api from '@/api' + +export function setToken(token) { + localStorage.setItem('token', token) + Api.defaults.headers.common['Authorization'] = 'Bearer ' + token; +} + +// should only be run at initialization +export function getToken() { + const token = localStorage.getItem('token') + Api.defaults.headers.common['Authorization'] = 'Bearer ' + token; + return token +} + +export function clearToken() { + localStorage.removeItem('token') + delete Api.defaults.headers.common['Authorization'] +} + +export default {setToken, getToken, clearToken} \ No newline at end of file diff --git a/web/src/store/index.js b/web/src/store/index.js index 387862b..3140477 100644 --- a/web/src/store/index.js +++ b/web/src/store/index.js @@ -1,15 +1,21 @@ import Vue from 'vue' import Vuex from 'vuex' +import {setToken, getToken, clearToken} from '@/jwt' Vue.use(Vuex) export default new Vuex.Store({ state: { - token: '' + token: getToken() }, mutations: { setToken: (state, {token}) => { - state.token = token; + state.token = token + setToken(token) + }, + clearToken(state) { + state.token = '' + clearToken() } }, actions: {}