From f4bc08d85192a9c49a7e4612099e3cbfcbb2b9c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Fri, 9 Sep 2022 16:09:17 +0900 Subject: [PATCH] Store_Vuex init... --- src/components/LoginComponent.vue | 46 +++++++++++++++++++++++++------ src/store/modules/auth.js | 12 ++++---- src/store/modules/jwt.js | 1 + src/store/modules/todo.js | 23 +++++++++++++--- 4 files changed, 63 insertions(+), 19 deletions(-) diff --git a/src/components/LoginComponent.vue b/src/components/LoginComponent.vue index 8996e90..9f52420 100644 --- a/src/components/LoginComponent.vue +++ b/src/components/LoginComponent.vue @@ -79,21 +79,49 @@ export default { getValidationState({ dirty, validated, valid = null }) { return dirty || validated ? valid : null }, - onSubmit() { - this.$store + async onSubmit() { + try { + //1.인증서버에서 인증코드받기 + const accessToken = await this.getAccessToken() + //2.인증코드를 받아오는데 성공하면 BackEnd서버로 인증코드를 보냄 + //console.log(accessToken) + await this.sendAccessToken(accessToken) + //3.next로 이동 + const return_url = this.$route.params.return_url || 'home' + alert('로그인 성공..\n' + return_url) + this.$router.push({ name: return_url }).catch((e) => { + throw new Error(return_url + '로 Redirect 실패\n' + e.message) + }) + } catch ({ message }) { + alert('로그인 실패...\n' + message) + } + }, + async getAccessToken() { + return await this.$store .dispatch('AuthStore/login', { email: this.form.email, password: this.form.password }) .then((response) => { - console.log(response) - const return_url = this.$route.params.return_url || 'home' - alert('로그인 성공... -> ' + return_url) - this.$router.push({ name: return_url }).catch((e) => { - console.log(e) - }) + //console.log(response) + //alert('인증서버에서 인증코드 받기 성공..') + return response.data.access_token + }) + .catch((e) => { + throw new Error('인증서버에서 인증코드 받기 실패..\n' + e.message) + }) + }, + async sendAccessToken(accessToken) { + return await this.$store + .dispatch('TodoStore/sendAccessToken', accessToken) + .then((response) => { + console.log(response) + alert('인증코드 전송 성공..') + return response.data + }) + .catch((e) => { + throw new Error('인증코드 전송 실패..\n' + e.message) }) - .catch(({ message }) => alert('로그인 실패...:' + message)) } } } diff --git a/src/store/modules/auth.js b/src/store/modules/auth.js index 09131d0..84af741 100644 --- a/src/store/modules/auth.js +++ b/src/store/modules/auth.js @@ -2,18 +2,18 @@ import axios from 'axios' import jwt from './jwt' //참조: https://yamoo9.github.io/axios/guide/interceptors.html -const authAxios = axios.create({ +const apiServer = axios.create({ baseURL: process.env.VUE_APP_AUTH_HOST, headers: { 'content-type': 'application/json' } }) -authAxios.interceptors.request.use( +apiServer.interceptors.request.use( (config) => jwt.getAuthorizationHeader(config), (error) => { // Do something with request error Promise.reject(error) } ) -authAxios.defaults.headers.post['Content-Type'] = +apiServer.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' // count state 속성 추가 @@ -50,7 +50,7 @@ const actions = { password: payload.password } return new Promise((resolve, reject) => { - authAxios + apiServer .post('/auth/login', params) .then((response) => { const { data } = response @@ -79,8 +79,8 @@ const actions = { name: payload.name } return new Promise((resolve, reject) => { - authAxios - .post('/user/register', params) + apiServer + .post('/auth/register', params) .then((response) => { const { data } = response context.commit('login', { diff --git a/src/store/modules/jwt.js b/src/store/modules/jwt.js index 0e288a4..f4c7a20 100644 --- a/src/store/modules/jwt.js +++ b/src/store/modules/jwt.js @@ -1,5 +1,6 @@ const Payload_KEY_NAME = 'access_token' const getToken = () => { + document.cookie.g return window.localStorage.getItem(Payload_KEY_NAME) } const saveToken = (token) => { diff --git a/src/store/modules/todo.js b/src/store/modules/todo.js index 0134daa..3b317fb 100644 --- a/src/store/modules/todo.js +++ b/src/store/modules/todo.js @@ -2,18 +2,18 @@ import axios from 'axios' import jwt from './jwt' //참조: https://yamoo9.github.io/axios/guide/interceptors.html -const todoAxios = axios.create({ +const apiServer = axios.create({ baseURL: process.env.VUE_APP_BACKEND_HOST, headers: { 'content-type': 'application/json' } }) -todoAxios.interceptors.request.use( +apiServer.interceptors.request.use( (config) => jwt.getAuthorizationHeader(config), (error) => { // Do something with request error Promise.reject(error) } ) -todoAxios.defaults.headers.post['Content-Type'] = +apiServer.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' // count state 속성 추가 @@ -36,11 +36,26 @@ const mutations = { } } const actions = { + sendAccessToken: function (context, accessToken) { + //주의 .get의 parameter는 { params: params} 처럼 보내야함 + return new Promise((resolve, reject) => { + apiServer + .get('/todo/accessToken', { params: accessToken }) + .then((response) => { + const { data } = response + context.commit('setData', data) + resolve(response) + }) + .catch((error) => { + reject(error) + }) + }) + }, setData: function (context, params) { console.log(params) //주의 .get의 parameter는 { params: params} 처럼 보내야함 return new Promise((resolve, reject) => { - todoAxios + apiServer .get('/todo', { params: params }) .then((response) => { const { data } = response