๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Vue

๐Ÿ‘ Vuex๋ฅผ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ ๊ด€๋ฆฌ

by frontChoi 2021. 7. 16.
๋ฐ˜์‘ํ˜•

๐Ÿ‘ Vuex๋ฅผ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ ๊ด€๋ฆฌ

์ด๋ฒˆ์—๋Š” Vuex์™€ JWT๋ฅผ ์ด์šฉํ•˜์—ฌ Token์„ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.
์‚ฌ์‹ค ํ˜„์—…์—์„œ๋Š” ์„ธ์…˜์ฟ ํ‚ค๋ฅผ ๋” ์“ฐ๋Š”๊ฑธ๋กœ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, Token์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค,

์ˆœ์„œ๋Š” userStore์ƒ์„ฑ => Vuex์— Token ์ €์žฅ => ์ƒˆ๋กœ๊ณ ์นจ ํ•  ๊ฒฝ์šฐ ํ† ํฐ ์ €์žฅ

1๏ธโƒฃuserStore์ƒ์„ฑ

์ฒ˜์Œ์—๋Š” store > modules ํด๋” ๋ฐ‘์— userStore ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

//userStore.js
const userStore = {
    namespaced: true,
    state: {},
    getters: {},
    mutations: {},
    actions: {},
};
export default userStore;

* ํด๋” ์œ„์น˜๋Š” ์•„๋ž˜ ์‚ฌ์ง„์— ์ฒจ๋ถ€ํ•œ๋‹ค.

2๏ธโƒฃVuex์— Token ์ €์žฅ

์ € ๊ฐ™์€ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ Vuex์˜ mutations ํ™œ์šฉํ•˜์—ฌ ํ† ํฐ์„ ์ €์žฅํ•˜์˜€๋‹ค.
์ฝ”๋“œ๋Š” userStore.js์˜ mutations ์•ˆ์— ๋กœ์ง์„ ๋„ฃ๋Š”๋‹ค. payload๋ถ€๋ถ„์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณดํ†ต ํ™œ์šฉ๋˜๊ณ 
state๋Š” ์ƒํƒœ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. MU_TOKEN์„ ํ™œ์šฉํ•˜์—ฌ accessToken, refreshToken์„ ์ €์žฅํ•œ๋‹ค.

//userStore.js
const userStore = {
    namespaced: true,
    state: {},
    getters: {},
    mutations: {
        MU_TOKEN: (state, payload) => {
            state.accessToken = payload.ACCESS_TOKEN;
            state.refreshToken = payload.REFRESH_TOKEN;
        },
    },
    actions: {},
};
export default userStore;

3๏ธโƒฃ์ƒˆ๋กœ๊ณ ์นจ ํ•  ๊ฒฝ์šฐ ํ† ํฐ ์ €์žฅ

Vuex ๊ฐ™์€ ๊ฒฝ์šฐ ์ƒˆ๋กœ๊ณ ์นจํ•  ๊ฒฝ์šฐ Vuex์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ„๋‹ค. ๊ทธ๋ž˜์„œ ์ƒˆ๋กœ๊ณ ์นจ ํ• ๋•Œ๋งˆ๋‹ค, Vuex์˜ ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ–๋Š”๋ฐ
๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” localStorage์— ์ €์žฅํ•œ ํ›„์— ์ƒˆ๋กœ๊ณ ์นจ ํ• ๋•Œ localStorage์—์„œ ๊ฐ’์„ ํ™•์ธํ•˜์—ฌ Vuex์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ˜์Œ์—๋Š” localStorage์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

token ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜

getAccessToken,getRefreshToken์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ถ”์ถœํ•œ๋‹ค.

// utils/token.js
const getAccessToken = () => {
    return localStorage.getItem('accessToken');
};
const getRefreshToken = () => {
    return localStorage.getItem('refreshToken');
};
export {
    getAccessToken,
    getRefreshToken,
};

userStore.js์—์„œ ๊ฐ’์„ ์„ธํŒ…

getAccessToken,getRefreshToken๋ฅผ importํ•˜์—ฌ state์— ์„ธํŒ…ํ•ด์ค€๋‹ค.

//userStore.js
import {getAccessToken,getRefreshToken} from 'root/utils/token';
const userStore = {
    namespaced: true,
    state: {
        accessToken: getAccessToken(),
        refreshToken: getRefreshToken(),
    },
    getters: {},
    mutations: {
        MU_TOKEN: (state, payload) => {
            state.accessToken = payload.ACCESS_TOKEN;
            state.refreshToken = payload.REFRESH_TOKEN;
        },
    },
    actions: {},
};
export default userStore;
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€