2021. 6. 30. 17:36ㆍNest.js
평소에 Nest.js관련 글에 API 만들기 관련된 포스트가 없어 직접 만들면서 공부하게 되었습니다. 해당 블로그는 공부를 남기기 위한 용도입니다. 피드백 부탁드립니다.
1. 로그인 서비스를 바꿔보자.
저번 시간에는 아주 간단한 서비스를 작성해 보았습니다. 이번 시간에는 쿠키를 활용해 로그인 기능을 구현해보도록 하겠습니다.
async login(loginDto: LoginDTO) {
try {
const user = await this.user.findOne({
userId: loginDto.userId
});
if (!user) {
return {
result: false,
statusCode: HttpStatus.BAD_REQUEST,
message: "유저가 존재하지 않습니다."
};
}
const result = await bcrypt.compare(loginDto.password, user.password);
if (!result) {
return {
result: false,
statusCode: HttpStatus.BAD_REQUEST,
message: "비밀번호가 일치하지 않습니다."
};
}
delete user["password"];
return {
result: true,
statusCode: HttpStatus.OK,
user: user
};
} catch (error) {
console.error(error);
return {
result: false.valueOf,
statusCode: HttpStatus.INTERNAL_SERVER_ERROR
};
}
}
저번과 다르게 조금 더 구체적으로 작성하였습니다.
유저가 실제로 존재하는지, 유저의 패스워드가 일치하는지를 체크하고 그에 따라 예외처리 또한 해두었습니다.
이제 다시 LoginController
로 가서 서비스를 이용해 로그인 EndPoint
를 수정하도록 하겠습니다.
@Post()
async login(@Body() loginDto: LoginDTO, @Res() response: Response) {
const result = await this.loginService.login(loginDto);
if (!result.result) {
return response.status(result.statusCode).json(result);
}
response.cookie("TistoryBlog", result.user.userId, {
domain: process.env.NODE_ENV === "production" ? "***" : "localhost",
path: "/",
sameSite: "lax",
httpOnly: true,
secure: process.env.NODE_ENV === "production",
maxAge: 3600 * 1000
});
response.status(result.statusCode).json(result);
}
저번과는 달리 return
을 사용하지 않고 response
객체를 사용했습니다. 큰 이유는 없고 그저 cookie
를 사용하기 위해서 response
객체를 이용하고 있습니다.
이제 swagger
로 가서 로그인 기능을 테스트해보겠습니다.
응답결과가 제대로 나왔다면 개발자도구에 Application
탭을 눌러 쿠키를 확인해 보면 되겠습니다.
쿠키가 잘 발급되었지만 한가지 문제점이 있습니다. Value
에 유저 아이디를 넣었지만 그대로 노출되지 않기를 바랍니다.
그래서 우리는 암호화를 해보도록 하겠습니다.
암호화에 앞서 여기를 클릭해 256비트 키를 하나 만들겠습니다.
그렇게 만든 키를 우리 .env
파일에 저장을 하고 설정을 해보겠습니다.
.env
파일에 등록 후 app.module
에서 ConfigModule
에 추가하도록 하겠습니다.
이제 main
에서 다음을 추가하겠습니다.
다시 controller
에서 signed: true
항목을 추가 후 다시 Swagger를 보도록 하겠습니다.
우리가 원하는 결과가 나왔습니다.
다음 시간에는 가드를 만들어 로그인 여부를 확인해보는 기능을 만들어보겠습니다.
'Nest.js' 카테고리의 다른 글
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 5편 (0) | 2021.06.17 |
---|---|
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 4편 (0) | 2021.06.08 |
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 3편 (0) | 2021.06.08 |
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 2편 (0) | 2021.06.06 |
[Nest.js] 맨땅에 헤딩 - Blog API 제작기 1편 (0) | 2021.06.05 |