Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] Board모듈 보안 : 게시글 본문 암복호화,Entity 관계적용, AuthGuard 적용, 게시글 생성 시 author 서버가 삽입 #136

Merged
merged 7 commits into from
Nov 22, 2023

Conversation

qkrwogk
Copy link
Collaborator

@qkrwogk qkrwogk commented Nov 22, 2023

📎 이슈번호

📃 변경사항

  • 게시글 본문 암복호화
  • Entity 간 관계 적용 (OneToMany, ManyToOne, OneToOne)
  • AuthGuard 적용
  • POST /board에 author <- nickname 직접 삽입

📌 중점적으로 볼 부분

logout처리에서 refresh token이 cookie와 redis에서 지워지지 않아 로그아웃이 되어도 세션이 유지되는 현상이 발견되었습니다.

// auth.controller.ts
@Get('signout')
@UseGuards(CookieAuthGuard)
async signOut(@Req() req, @Res({ passthrough: true }) res: Response) {
	res.clearCookie('accessToken', { path: '/', httpOnly: true });
	res.clearCookie('refreshToken', { path: '/', httpOnly: true });
	await this.authService.signOut(req.user.username);
	return { message: 'success' };
}
// auth.service.ts
async signOut(username: string) {
  // redis에 저장된 refreshToken 삭제
  await this.redisRepository.del(username);
}
// redis.repository.ts
@Injectable()
export class RedisRepository {
	...
	async del(key: string) {
		return this.redisClient.del(key);
	}
}

이렇게 해결은 해뒀는데 괜찮을까요? 문제는 이렇게 처리하면 예전에 저희가 협의했던
"로그인 안 된 상태에서 로그아웃 요청 시 무시한다" 가 Guard때문에 안되어버립니다 (Unauthorize Exception 발생)
요 부분은 한번 보시고 이상하면 다시 없애거나 수정 부탁드리겠습니다!!

🎇 동작 화면

게시글 본문 암복호화

스크린샷 2023-11-22 오후 12 03 14

암호화돼서 잘 저장됨

스크린샷 2023-11-22 오후 12 03 37

GET으로 요청할 땐 복호화되어 반환됨

스크린샷 2023-11-22 오후 12 05 11

DB에 저장될때는 암호문으로!

Entity 간 관계 적용 (OneToMany, ManyToOne, OneToOne)

-- Active: 1694011841232@@192.168.64.2@3306@b1g1
CREATE TABLE `board` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` text,
  `author` varchar(50) NOT NULL,
  `like_cnt` int NOT NULL DEFAULT '0',
  `created_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  `updated_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  `imageId` int DEFAULT NULL,
  `userId` int DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `REL_6c2a2c2b30fbb895ef2dc41294` (`imageId`),
  KEY `FK_c9951f13af7909d37c0e2aec484` (`userId`),
  CONSTRAINT `FK_6c2a2c2b30fbb895ef2dc412947` FOREIGN KEY (`imageId`) REFERENCES `image` (`id`),
  CONSTRAINT `FK_c9951f13af7909d37c0e2aec484` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

board 테이블 DDL

AuthGuard 적용

로그인 했을 때

스크린샷 2023-11-22 오후 1 33 54

스크린샷 2023-11-22 오후 1 34 01

로그아웃 했을 때

스크린샷 2023-11-22 오후 2 17 36

스크린샷 2023-11-22 오후 2 17 42

POST /board에 author <- nickname 직접 삽입

스크린샷 2023-11-22 오후 2 54 29

이제 author는 삽입되어도 무시하고 원래 닉네임으로 잘 들어간다.

💫 기타사항

@qkrwogk qkrwogk added ✨ Feature 기능 개발 🐛 BugFix 에러 해결 BE 백엔드 labels Nov 22, 2023
@qkrwogk qkrwogk added this to the Week 3 milestone Nov 22, 2023
@qkrwogk qkrwogk self-assigned this Nov 22, 2023
- AES 암복호화를 위한 crypto 모듈 설치
- AES 암복호화 함수 구현
- config 파일로 dotenv 처리
- 게시글 DB 삽입 시 본문 암호화하여 저장 (생성, 수정 단계)
- 게시글 DB 조회 시 본문 복호화하여 반환 (조회 단계)
- OneToOne 관계 (Board <-> Image)
- ManyToOne, OneToMany 관계 (board <-> user / board가 many)
- board 모듈에 auth 모듈에서 구현한 Custom Auth Guard를 사용하기 위해 등록
- auth 모듈에서 적절한 export가 이루어지지않아 오작동, 의존성 주입 문제 해결
- 모든 기능이 로그인이 된 이후에 사용할 수 있도록 UseGuard 적용
- 글 수정, 삭제 시 author를 사용자 임의가 아닌 서버에서 정의되도록 수정
@qkrwogk
Copy link
Collaborator Author

qkrwogk commented Nov 22, 2023

@SongJSeop
충돌 해결해서 다시 push 했습니다! 이제 머지 가능합니다.

Copy link
Collaborator

@SongJSeop SongJSeop left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

언제 이렇게 많이 하셨죠?ㅎ 좋습니다
질문들은 코드에 남겨놓았습니다!!!

@SongJSeop SongJSeop merged commit 5ae8739 into boostcampwm2023:be-develop Nov 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 🐛 BugFix 에러 해결 ✨ Feature 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants