codestates / codestates/art-ground

[Dev Log] 20210928 / 유다희

Open
#290 0 comments 0 reactions 1 assignee Claimed by @tkdkagody View on GitHub
Dev Log Error Handling Log
Dominant language
JavaScript
Stars
7
Forks
9
PR merge metrics
No merged PRs in 30d

Description

브랜치: mypageDetail,

## **오늘 TODO**

- [x] 로그인 버그 : 계속 유지되는 이유, 로컬에서는 해결 벗 배포에서 안되는 문제 미팅(순려님)
3일만에 드디어 잡았다.....!!!! 며칠을 정말!!
- [x] mypage - 내 전시회 : 데이터가 없는 경우 map펑션 에러 뜨는 버그...!!!! 후.....
- [x] mypage - 작가인경우에만, sub바에 '내 전시' 탭이 뜨고, info에 '작가소개' 란이 보여야함
- [x] mypage 레이아웃 깔끔하게 변경 필요. 반응형 320까지 줄였을때 깨지지 않도록 조정
- [x] mypage 프로필이미지 백그라운드 수정
- [x] join/signin 페이지 버튼 버그
- [x] join/signin 페이지 레이아웃 깔끔하게 변경 및 반응형 수정
- [x] 로그인 관련 페이지에서 마이페이지 클릭시 이상한 파라미터로 이동하는 버그
- [ ] setErrormessage 기본은 막아둠 → 수정필요

## New thing!

리액트-슬릭
```jsx
npm install react-slick --save
npm install slick-carousel
npm install react-bootstrap@next bootstrap@5.1.1
npm uninstall react-bootstrap@next bootstrap@5.1.1
npm uninstall react-slick --save
npm uninstall slick-carousel

import Slider from "react-slick";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
import styles from "./AboutSlider2.module.css";
import { Card, Button } from "react-bootstrap";
```
css를 깔아서 원하는 곳에 완성된 컴포넌트를 적용하면 css 충돌이 일어나서
페이지 height가 무한으로 길어짐///.

## **ERROR노트**

## 1. 또 만난 map function에러 (받아온 데이터 형태)

문제

- [ ] map function 에러

해결

- [ ] 받아온 데이터의 null값이 어떤 형태로 들어있는지 확인필요

유사한 형태의 데이터와 같은 로직으로 렌더링 되어야 하는 컴포넌트 중, 하나만 맵핑에러가 뜨는것을 발견.

내전시와 내가찜한 전시 이 두 컴포넌트 렌더링에서 버그를 발견했다.

api통신 시도했을때는 데이터 렌더링을 위해 두개의 통신 모두 존재하는 데이터를 배열의 형태로 받아왔다

따라서 , [{}.{},{};;;] 이러한 형태로 데이터가 들어있기 때문에 상위 컴포넌트에서 axios요청을 보내서 맵핑→ 객체 요소를 하위 컴포넌트로 보내주는 로직 !

근데 미스테리하게 하나만 매핑에러가 뜨는 거임..

1. 처음 생각한건 이전에 겪었던, 프롭스 전달하는데 소요되는 시간보다 컴포넌트 전환이 빠른 문제

→ 이미 겪었던 문제라서 이미 setTimeOut을 걸어뒀기 때문에 의문! 그래서 아닌것 같긴 하지만 상태값이 충돌해서 그런가 하고 새롭게 상태를 지정해서 렌더해봤지만 해결되지 않음

1. map에러가 뜨는 또 하나의 이유 데이터가 없는경우 ! 이것도 이미 조건문으로 데이터가 있는경우에만 매핑을 하도록 만들어 둠 !!

## map function에러를 구글링하면 많은 게시물들이 배열데이터가 아니라고 하고 있다. 정답!

![Screenshot from 2021-09-29 04-07-33](https://user-images.githubusercontent.com/80307779/135662279-9589e569-b1b6-4f56-951e-fb7d9f1da3a9.png)

### 그치만, 데이터가 있는 경우 두 값 모두 배열의 형태로 **[{}.{},{};;;] 데이터를 가져오고 있음**

초기상태도 애초에 배열의 형태로 담아뒀다.... 위에서도 언급한것 처럼 너무나도 같은 로직

[데이터 통신]

axios요청시 → res.data.data.length를 콘솔에 찍으면 있는 데이터의 개수를 가져온다.

하지만 동시에 콘솔에 length가 작동하지 않는다고 떴다. 이건 또 왜그러는지 궁금하다

정답은 3번 배열이 아닌 데이터 였다.
![Screenshot from 2021-09-29 04-08-55](https://user-images.githubusercontent.com/80307779/135662359-f6ee2e7d-bb2c-41ba-9a53-c45b708cda84.png)

기존 아이디들은 둘중 하나는 데이터가 있던지, 둘다 있던지 해서 아무 데이터도 없는 값을 axios로 받아왔더니,,,,

제대로 매핑이 되는 것은 데이터가 없는 경우 =⇒ [ ] 빈배열의 형태.

안되는 것은 ==⇒ undefined

이렇게 렌더해주었더니... 아주 무리없이 에러없이 잘 돌아감 .. ! ㅎ

기존 사용하던 아이디들이 둘 중 하나는 데이터를 가지고 있던지, 둘다 가지고 있던지해서 차이점 발견까지 너무 오래걸렸다. 후..

*첫번째: 전시회(undefined), 두번째: 라이크([ ])

## 2. 배포사이트 쿠키에 토큰이 저장되지 않는 문제

제일 큰 버그였던 로그인 버그를 잡았다.

문제 :

- [ ] 1 로그아웃을 해도 계속 로그인이 유지됨
- [ ] 2 로컬에는 local쿠키탭에 액세스 토큰이 잘 들어가 있는데, 배포에서는 보이지 않음 (setcookie는 잘 들어와 있음)
- [ ] 3 엑세스 토큰이 사라지지 않음!

해결 :

- [ ] 가장먼저 확인해야할 것은 로그인 로그아웃 등 필요한 통신 요청이 한곳으로 잘 가고 있는지
- [ ] 토큰에 expire 설정.
- [ ] 배포사이트의 쿠키탭에 엑세스토큰이 보이지 않아도 토큰 성능에는 이상이 없음
- [ ] 처음 받아온 쿠키가 트래킹 되는듯 ! 크롬에 있는 쿠키를 삭제하니, 원점으로 돌아가게 됨
- [ ] 쿠키가 삭제되지 않는 문제가 아니라 애초에 쿠키에 토큰이 저장되지 않았음 .
- [ ] 아마도 배포할때 뭔가 꼬인듯 함 쿠키 저장이 로컬로만 되도록 설정 되어있을 듯하다 → 다른 프로젝트들 참고해보면 옵션없이도 셋쿠키, 클리어쿠키 잘만한다.
- [ ] 쿠키를 보낼때 옵션으로 꼬인 문제를 제어할 수 있다.
- [ ] 필수적으로 도메일 설정을 해주어야 하는데 이때 도메인은 : 당연히 서버 도메인!!(쿠키 스코프지정)

![Screenshot from 2021-09-29 05-52-35.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3d65676a-9f04-424f-946d-02e57b522047/Screenshot_from_2021-09-29_05-52-35.png)

```jsx
# 쿠키생성: 만료
return sign(data, process.env.ART_GROUND_ACCESS_SECRET, {
expiresIn: "1d",
});
```

```jsx
## res.cookie
지정된 곳 이외의 사이트에도 쿠키가 저장되도록 옵션설정함

sendAccessToken: (res, accessToken) => {
res
.cookie("accessToken", accessToken, {
httpOnly: true,
sameSite: "none",
secure: true,
maxAge: 60 * 60 * 24 * 1000,
domain: "art-ground.link",
path: "/",
ovewrite: true,
})
.status(200)
.send("AccessToken ready");
},
```

```jsx
# clearCookie
signOut: (req, res) => {
try {
res
.clearCookie("accessToken", {
httpOnly: true,
sameSite: "none",
secure: true,
path: "/",
domain: "art-ground.link",
})
.status(205)
.json({ message: "successfully signed out!" });
} catch (error) {
console.log(error);
res.status(500).json({ message: "server error" });
}
},
```
![Screenshot from 2021-09-29 05-20-56](https://user-images.githubusercontent.com/80307779/135662777-43ff9a7b-f165-416e-a0fa-bbef1adad89c.png)
분명히 셋쿠키 들어가있고,

![Screenshot from 2021-09-26 22-33-54.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8e2501a4-2186-4da7-a384-9b0289e8a3e2/Screenshot_from_2021-09-26_22-33-54.png)

1. 쿠키로 토큰 보낼때 옵션을 httpOnly로 주면, client쪽에서 document.cookie로 받아오는 것 불가능함 → 클라이언트 문제일까 싶어서 ct에서 조작할 수 있는 방법을 찾아봤는데, 있기는 하다 하지만 보안상 원래 쿠키는 서버쪽에서만 다루는것이 맞기 때문에 document,cookie 혹은 react-cookie 등의 방법은 권장사항이 아님 . 아래 사진은 documet.cookie로 다른 이상한 쿠키값만 들고고는 이미지 .

![Screenshot from 2021-09-26 22-49-29.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2df47e97-e621-44fd-b58d-ed77b882ff16/Screenshot_from_2021-09-26_22-49-29.png)

[https://arjunphp.com/handle-cookies-express-js/](https://arjunphp.com/handle-cookies-express-js/)

![Screenshot from 2021-09-29 04-07-38.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/db5abad5-c3d0-4863-911e-b07aea66e2cd/Screenshot_from_2021-09-29_04-07-38.png)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.