-
Notifications
You must be signed in to change notification settings - Fork 4
localStorage.getItem ์๋ฌ
App.vue์์ ์ ์ ์ธ์ฆ์ ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ก์ง์ ์งฐ๋ค.
export default {
name: "App",
data: () => ({
//
}),
created() {
// token ์ ์ฅ
// eslint-disable-next-line no-unused-vars
const [_, accessToken] = location.search.split("token=");
if (accessToken) {
store.dispatch("setToken", { accessToken });
location.replace("/");
return;
}
const token = localStorage.getItem("token");
if (!token) {
router.replace("/login").catch(() => {});
return;
} else if (token) {
store.dispatch("checkUser");
return;
}
},
mounted() {},
};
</script>
oAuth ์๋ฒ์์ URL query๋ก token์ ๋๊ฒจ์ฃผ๋ฉด token์ localStorage์ ์ ์ฅํ๊ณ ๋ฆฌ๋ค์ด๋ ํธํด์ ์ ์ฅ๋ token์ผ๋ก ์ ์ ์ธ์ฆ์ ํ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฌ๋ location.replace('/')
ํ์ user api ํต์ ์ด Unauthorized error๊ฐ ๋๊ณ ๋ค์ ํ๋ฒ user api ํต์ ์ด ์ด๋ฃจ์ด์ก๋ค(์ด๋๋ ์ฑ๊ณต).
์์ธ์ ๋ถ์ํด๋ณด๋ location.replace("/") ํ ์๋ ๋จ์์๋ ์ฝ๋๋ค์ ์ฝ์ด์ ๊ทธ๋ฐ๊ฒ!
๊ทผ๋ฐ dispatch('checkUser')
๋ฅผ ํด์คฌ์ผ๋ฉด token
์ด ๋ค์ด๊ฐ๋ค๋ ๊ฑด๋ฐ ์ ์๋ฌ๊ฐ ๋ ๊น?
๋ต์ axios headers ์ค์ ์ ์์๋ค.
๋งค๋ฒ header๋ก token์ ์ค์ ํด์ฃผ๋ ๊ฒ์ ๋ชจ๋ํํ๊ธฐ ์ํด myAxios๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
const headerConfig = {
headers: {
Authorization: "Bearer " + localStorage.getItem('token')
},
};
const BASE_URL = process.env.VUE_APP_SERVER_URL;
const myAxios = {
GET: (path) => {
return axios.get(BASE_URL + path, headerConfig());
}, ...
};
์ด๋ headerConfig๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ด token์ ์ ์ฅํ ์ด์ ์์ ์ด๋ผ header์ token์ด null
๋ก ๋ด๊ธฐ๋ ๊ฒ์ด์๋ค.
headerConfig๋ฅผ ๋์ ์ผ๋ก(?) ์คํ์ํค๊ธฐ ์ํด ํจ์ํํ๊ณ ๋๋ getItem์์ ์ด token ์ ์ฅ ์ดํ ์์ ์ด ๋์๊ณ ์ ์์ ์ผ๋ก ๋์์ด ๋์๋ค.
const getToken = () => localStorage.getItem("token");
const headerConfig = () => {
return {
headers: {
Authorization: "Bearer " + getToken(),
},
};
};
์ฝ 2์๊ฐ ์ฝ์ง์ ํ์ง๋ง ๊ทธ๋๋ ํด๊ฒฐํด์ ๋ฟ๋ฏ ^&^