From 76b669c7375d897747cb3c77e8a59965f7604404 Mon Sep 17 00:00:00 2001 From: leejinseok Date: Fri, 14 Feb 2020 11:43:26 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EA=B2=83=EC=A0=80=EA=B2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/front/src/api/articleApi.js | 26 +++++++++---- src/front/src/pages/articles/Detail.vue | 3 -- src/front/src/pages/articles/List.vue | 38 ++++++++++++------- src/front/src/pages/articles/Write.vue | 3 +- src/front/src/services/articleService.js | 28 ++++++-------- src/front/src/services/authService.js | 4 ++ .../vue/config/SecurityConfiguration.java | 2 +- .../example/vue/domain/article/Article.java | 4 ++ 8 files changed, 67 insertions(+), 41 deletions(-) diff --git a/src/front/src/api/articleApi.js b/src/front/src/api/articleApi.js index f5c8e17..7c1aeb2 100644 --- a/src/front/src/api/articleApi.js +++ b/src/front/src/api/articleApi.js @@ -3,25 +3,37 @@ import axios from 'axios'; export default { getArticles({page = 0, size = 10, q = ''}, authorization) { - return axios({ + const request = axios({ url: '/api/articles', - headers: { - 'Authorization': authorization - }, params: { page, size, q } }); + + if (authorization) { + request.headers = { + 'Authorization': authorization + }; + } + + return request; }, getArticle({articleId}, authorization) { - return axios({ + const request = axios({ url: '/api/articles/' + articleId, - headers: { + + }); + + if (authorization) { + request.headeres = { 'Authorization': authorization } - }); + } + + return request; + }, postArticle({title = '', content = ''}, authorization) { diff --git a/src/front/src/pages/articles/Detail.vue b/src/front/src/pages/articles/Detail.vue index d273fe1..c427877 100644 --- a/src/front/src/pages/articles/Detail.vue +++ b/src/front/src/pages/articles/Detail.vue @@ -36,9 +36,6 @@ }; }, async beforeCreate() { - authService.banishIfUserUnAuthenticated = authService.banishIfUserUnAuthenticated.bind( - this - ); articleService.getArticle = articleService.getArticle.bind(this); articleService.removeArticle = articleService.removeArticle.bind(this); }, diff --git a/src/front/src/pages/articles/List.vue b/src/front/src/pages/articles/List.vue index 16a580e..3a53cd8 100644 --- a/src/front/src/pages/articles/List.vue +++ b/src/front/src/pages/articles/List.vue @@ -9,17 +9,20 @@
-
- 글쓰기 -
+
+
+ 글쓰기 +
-
- -
+
+ +
-
- My +
+ My +
+
@@ -32,18 +35,27 @@ data() { return { articles: [], - pending: true + pending: true, + user: null }; }, async beforeCreate() { articleService.getArticles = articleService.getArticles.bind(this); authService.logout = authService.logout.bind(this); - authService.banishIfUserUnAuthenticated = authService.banishIfUserUnAuthenticated.bind( - this - ); + authService.session = authService.session.bind(this); + // authService.banishIfUserUnAuthenticated = authService.banishIfUserUnAuthenticated.bind( + // this + // ); }, async created() { - await authService.banishIfUserUnAuthenticated(); + try { + const { data } = await authService.session(); + this.user = data; + } catch (err) { + console.log(err); + } + + // await authService.banishIfUserUnAuthenticated(); this.articles = await articleService.getArticles({}); this.pending = false; }, diff --git a/src/front/src/pages/articles/Write.vue b/src/front/src/pages/articles/Write.vue index 2c1901a..f124eec 100644 --- a/src/front/src/pages/articles/Write.vue +++ b/src/front/src/pages/articles/Write.vue @@ -41,9 +41,10 @@ ); }, async created() { + await authService.banishIfUserUnAuthenticated(); + const id = this.$route.query.id; if (id) { - await authService.banishIfUserUnAuthenticated(); const {title, content, user} = await articleService.getArticle(id); await articleService.doseSessionHasPermission(user); diff --git a/src/front/src/services/articleService.js b/src/front/src/services/articleService.js index c73d531..26196a2 100644 --- a/src/front/src/services/articleService.js +++ b/src/front/src/services/articleService.js @@ -5,10 +5,13 @@ import authApi from "../api/authApi"; export default { async getArticles({page = 0, size = 10}) { try { + const accessToken = this.$cookie.get('accessToken'); + const authorization = accessToken ? commonUtil.getAuthenticationHeaderBearer(accessToken) : ''; + const result = await articleApi.getArticles({ page, size - }, commonUtil.getAuthenticationHeaderBearer(this.$cookie.get('accessToken'))); + }, authorization); return result.data; } catch (err) { alert('문제가 발생하였습니다.'); @@ -20,9 +23,9 @@ export default { const authorization = commonUtil.getAuthenticationHeaderBearer(this.$cookie.get('accessToken')); const result = await articleApi.getArticle({articleId}, authorization); return result.data; - } catch (e) { + } catch (err) { alert('문제가 발생하였습니다.'); - console.log(e); + console.log(err); } }, async removeArticle(articleId) { @@ -54,23 +57,16 @@ export default { } }, async doseSessionHasPermission(user) { - let session = null; - try { const result = await authApi.session(commonUtil.getAuthenticationHeaderBearer(this.$cookie.get('accessToken'))); - session = result.data; - } catch (err) { - alert('문제가 발생하였습니다.'); - return; - } - - try { - if (user.id !== session.id) { - throw new Error("현재 사용자가 해당 게시글에 권한이 없습니다."); + const session = result.data; + if (session.id !== user.id) { + alert("현재 사용자가 해당 게시글에 권한이 없습니다."); + await this.$router.replace("/articles/" + this.$route.query.id); } } catch (err) { - alert(err.message); - await this.$router.replace("/articles/" + this.$route.query.id); + alert('문제가 발생하였습니다.'); + console.log(err); } } } \ No newline at end of file diff --git a/src/front/src/services/authService.js b/src/front/src/services/authService.js index a6a36f7..1f6b0ad 100644 --- a/src/front/src/services/authService.js +++ b/src/front/src/services/authService.js @@ -26,6 +26,10 @@ export default { } } }, + session() { + return authApi.session(commonUtil.getAuthenticationHeaderBearer(this.$cookie.get('accessToken'))); + + }, async logout() { try { this.$cookie.set('accessToken', null, 0); diff --git a/src/main/java/com/example/vue/config/SecurityConfiguration.java b/src/main/java/com/example/vue/config/SecurityConfiguration.java index 3e29587..4374f9b 100644 --- a/src/main/java/com/example/vue/config/SecurityConfiguration.java +++ b/src/main/java/com/example/vue/config/SecurityConfiguration.java @@ -33,7 +33,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter { .antMatchers("/auth/login").permitAll() .antMatchers("/auth/register").permitAll() .antMatchers("/users").authenticated() - .antMatchers("/articles").authenticated() + .antMatchers("/articles").permitAll() .antMatchers("/me").authenticated() .and() .formLogin().disable() diff --git a/src/main/java/com/example/vue/domain/article/Article.java b/src/main/java/com/example/vue/domain/article/Article.java index 5c2de48..8379f57 100644 --- a/src/main/java/com/example/vue/domain/article/Article.java +++ b/src/main/java/com/example/vue/domain/article/Article.java @@ -63,6 +63,10 @@ public class Article { } public boolean compareUser(User user) { + if (user == null) { + return false; + } + return compareUser(user.getId()); }