유저에게 게시물 접근 권한 주기.
인증에 관한 모듈을 board 모듈에서 쓸 수 있어야 하기에 board module에서 인증 모듈 imports
(이렇게 한다면 AuthModule에서 export 하는 어떤 것이든 board Module에서 사용 가능)
// boards.module.ts에 AuthModule 추가
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from 'src/auth/auth.module';
import { Board } from './board.entity';
import { BoardRepository } from './board.repository';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
@Module({
imports: [TypeOrmModule.forFeature([BoardRepository]), AuthModule],
controllers: [BoardsController],
providers: [BoardsService, BoardRepository],
exports: [BoardsService],
})
export class BoardsModule {}
UseGuards(AuthGuard())를 이용하여 게시물 접근 권한 제공
UseGuards(AuthGuard())를 이용하여 유저가 요청을 줄 때 올바른 토큰으로 요청을 주는지 확인 후 게시물에 접근 할 권한을 준다. 그리고 이 AuthGuard는 각각의 라우트 별로 줄 수도 있고, 한번에 하나의 컨트롤러 안에 들어있는 모든 라우트에 줄 수 있다.
이번 방법은 board 컨트롤러 안에 있는 모든 라우트에 AuthGuard를 적용하려 한다.
// boards.controller.ts에 @UseGuards(AuthGuard()) 데코레이터 추가
@Controller('boards')
@UseGuards(AuthGuard())
export class BoardsController {
constructor(private boardsService: BoardsService) {}
@Get()
getAllBoard(): Promise<Board[]> {
return this.boardsService.getAllBoards();
}
@Get('/:id')
getBoardById(@Param('id', ParseIntPipe) id: number): Promise<Board> {
return this.boardsService.getBoardById(id);
}
@Post()
@UsePipes(ValidationPipe)
createBoard(@Body() createBoardDto: CreateBoardDto): Promise<Board> {
return this.boardsService.createBoard(createBoardDto);
}
@Delete('/:id')
deleteBoard(@Param('id', ParseIntPipe) id: number): Promise<void> {
return this.boardsService.deleteBoard(id);
}
@Patch('/:id/status')
updateBoardStatus(
@Param('id', ParseIntPipe) id: number,
@Body('status', BoardStatusValidationPipe) status: BoardStatus,
) {
return this.boardsService.updateBoardStatus(id, status);
}
}
해당 데코레이터를 boards 전체 라우트에 적용 시키게 된다면 이젠 토큰이 없을 때, 인증되지 않은 사용자로 처리가 된다.
{
"statusCode": 401,
"message": "Unauthorized"
}
이젠 헤더에 토큰을 넣은 후 요청을 해야 원하는 값을 가져올 수 있다.
'Nest.js' 카테고리의 다른 글
[Nest.js] 본인의 게시물만 보고 쓰고 삭제하기 (0) | 2023.01.30 |
---|---|
[Nest.js] Passport, JWT 이용해서 토큰 인증 후 유저 정보 가져오기 (0) | 2023.01.30 |
[Nest.js] 회원가입과 로그인 구현 2 (0) | 2023.01.27 |
[Nest.js] 회원가입과 로그인 구현 1 (0) | 2023.01.27 |
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 3 (0) | 2023.01.26 |