diff --git a/client/public/img/jwt/5.jpeg b/client/public/img/jwt/5.jpeg
deleted file mode 100644
index f4497ee..0000000
Binary files a/client/public/img/jwt/5.jpeg and /dev/null differ
diff --git a/client/public/img/jwt/5.png b/client/public/img/jwt/5.png
new file mode 100644
index 0000000..abd2fe2
Binary files /dev/null and b/client/public/img/jwt/5.png differ
diff --git a/client/src/components/common/MarkdownRender.js b/client/src/components/common/MarkdownRender.js
index aafa886..ba3fed2 100644
--- a/client/src/components/common/MarkdownRender.js
+++ b/client/src/components/common/MarkdownRender.js
@@ -36,6 +36,10 @@ const Wrapper = styled.div`
line-height: 2;
}
h1 {
+ @media (max-width: 400px) {
+ font-size: 28px;
+ line-height: 1.4;
+ }
font-size: 36px;
line-height: 1.2;
font-weight: 500;
@@ -53,6 +57,28 @@ const Wrapper = styled.div`
margin-top: 80px;
margin-bottom: 40px;
}
+ h3 {
+ @media (max-width: 400px) {
+ font-size: 17px;
+ line-height: 1.4;
+ margin-top: 15px;
+ }
+ font-size: 20px;
+ line-height: 1.2;
+ font-weight: 500;
+ margin-top: 30px;
+ }
+ a {
+ font-size: 16px;
+ color: #7fcde1;
+ text-decoration: none;
+ &:hover {
+ text-decoration: underline;
+ }
+ &:visited {
+ color: #7fcde1;
+ }
+ }
pre {
@media (max-width: 400px) {
margin-top: 15px;
@@ -66,32 +92,33 @@ const Wrapper = styled.div`
function MarkdownRender(props) {
const { markdownContent } = props;
+ const renderers = {
+ a: ({ children, href }) => (
+
+ {children}
+
+ ),
+ code: ({ node, inline, className, children, ...props }) => {
+ const match = /language-(\w+)/.exec(className || "");
+ return !inline && match ? (
+
+ {String(children).replace(/\n$/, "")}
+
+ ) : (
+
+ {children}
+
+ );
+ },
+ };
return (
-
- {String(children).replace(/\n$/, "")}
-
- ) : (
- // 안 맞다면 문자열 형태로 반환
-
- {children}
-
- );
- },
- }}
- >
+
{markdownContent}
diff --git a/server/_post/jwt.md b/server/_post/jwt.md
index 5b7ad25..e1bacd1 100644
--- a/server/_post/jwt.md
+++ b/server/_post/jwt.md
@@ -36,9 +36,7 @@ jwt 토큰을 발급 받을때만 DB를 거치고 그다음의 인증요청때
서버에서 access토큰은 body로 보내고 refresh토큰은 cookie에 저장했습니다
-access 토큰은 header에 고정해서 api요청을 할때마다 같이 보내고 유효 시간은 5분으로 설정(5분뒤 요청을 보내면 refresh 토큰으로 다시 access 토큰을 발급 받아야 합니다)
-
-![jwt](../img/jwt/5.jpeg)
+access 토큰은 header에 고정해서 api요청을 할때마다 같이 보내고 유효 시간은 1시간으로 설정(1시간뒤 요청을 보내면 refresh 토큰으로 다시 access 토큰을 발급 받아야 합니다)
```js
const httpClientForCredentials = axios.create({
@@ -56,9 +54,11 @@ refresh토큰은 유효 시간을 2주로 설정하고 access토큰이 유효하
## 백과 프론트가 도메인이 다를때 쿠키 주고 받기
+![jwt](../img/jwt/5.png)
+
도메인은 지금 블로그 url중 sheepdog13.blog부분 입니다.
-제 블로그는 서버는 [render](render.com) PaaS(Platform as a Service) 서비스로 배포 하고, 프론트는 aws cloudfront를 이용해서 서로 도메인이 다릅니다. 도메인이 다를때 쿠키를 교환할려면
+제 블로그는 서버는 [render](https://render.com) PaaS(Platform as a Service) 서비스로 배포 하고, 프론트는 aws cloudfront를 이용해서 서로 도메인이 다릅니다. 도메인이 다를때 쿠키를 교환할려면
1. https 설정을 해야합니다.
2. cookie 속성중 하나인 sameSite 속성을 none으로 설정해야 합니다.
@@ -98,3 +98,13 @@ res.cookie("refreshtoken", userdata.token, options).status(200).json({
```
cors설정은 볼륨이 많이 질 거 같아서 다음 포스팅 때 정리하겠습니다.
+
+### git issue
+
+- [accesstoken, refreshtoken으로 로그인 구현](https://github.com/sheepdog13/sheepdog.blog/issues/26)
+
+### 참고자료
+
+- [프론트에서-안전하게-로그인-처리하기](https://velog.io/@yaytomato/프론트에서-안전하게-로그인-처리하기)
+- [Access-Token-Refresh-Token-원리-feat-JWT](https://inpa.tistory.com/entry/WEB-📚-Access-Token-Refresh-Token-원리-feat-JWT)
+- [https://jeleedev.tistory.com/174](https://jeleedev.tistory.com/174)
diff --git a/server/models/User.js b/server/models/User.js
index c572c42..f1157fd 100644
--- a/server/models/User.js
+++ b/server/models/User.js
@@ -71,7 +71,7 @@ userSchema.methods.generateToken = async function () {
var user = this;
// jsonwebtoken을 이용해서 token을 생성하기
var accesstoken = jwt.sign({ username: user.name }, SecretKey, {
- expiresIn: "5m",
+ expiresIn: "1h",
});
var refreshtoken = jwt.sign(user._id.toHexString(), SecretKey);
// refreshtoken을 db에 저장한다.