이 글은 아래 동영상 강의로 제공됩니다.
이번엔 Nestjs로 백엔드 개발을 진행합니다.
전체적인 진행 순서는 다음과 같습니다.
- kakao developer에서 애플리케이션 생성
- 전체 Workflow 이해하기
- Nuxtjs(Frontend) 개발
- Nestjs(Backend) 개발
아래 명령으로 프로젝트를 생성합니다.
nest new kakao-login-back
- package manager : yarn
axios package를 추가합니다.
yarn add axios
server port를 3001로 바꿔줍니다.
src/main.ts
await app.listen(3001);
src/app.controller에 login api를 만듭니다.
@Post('/login')
async login(@Body() body: any, @Response() res): Promise<any> {
try {
// 카카오 토큰 조회 후 계정 정보 가져오기
const { code, domain } = body;
if (!code || !domain) {
throw new BadRequestException('카카오 정보가 없습니다.');
}
const kakao = await this.appService.kakaoLogin({ code, domain });
console.log(`kakaoUserInfo : ${JSON.stringify(kakao)}`);
if (!kakao.id) {
throw new BadRequestException('카카오 정보가 없습니다.');
}
res.send({
user: kakao,
message: 'success',
});
} catch (e) {
console.log(e);
throw new UnauthorizedException();
}
}
src/app.service.ts에 다음 내용을 추가합니다.
async kakaoLogin(options: { code: string; domain: string }): Promise<any> {
const { code, domain } = options;
const kakaoKey = '87073966cb41...';
const kakaoTokenUrl = 'https://kauth.kakao.com/oauth/token';
const kakaoUserInfoUrl = 'https://kapi.kakao.com/v2/user/me';
const body = {
grant_type: 'authorization_code',
client_id: kakaoKey,
redirect_uri: `${domain}/kakao-callback`,
code,
};
const headers = {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
};
try {
const response = await axios({
method: 'POST',
url: kakaoTokenUrl,
timeout: 30000,
headers,
data: qs.stringify(body),
});
if (response.status === 200) {
console.log(`kakaoToken : ${JSON.stringify(response.data)}`);
// Token 을 가져왔을 경우 사용자 정보 조회
const headerUserInfo = {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
Authorization: 'Bearer ' + response.data.access_token,
};
console.log(`url : ${kakaoTokenUrl}`);
console.log(`headers : ${JSON.stringify(headerUserInfo)}`);
const responseUserInfo = await axios({
method: 'GET',
url: kakaoUserInfoUrl,
timeout: 30000,
headers: headerUserInfo,
});
console.log(`responseUserInfo.status : ${responseUserInfo.status}`);
if (responseUserInfo.status === 200) {
console.log(
`kakaoUserInfo : ${JSON.stringify(responseUserInfo.data)}`,
);
return responseUserInfo.data;
} else {
throw new UnauthorizedException();
}
} else {
throw new UnauthorizedException();
}
} catch (error) {
console.log(error);
throw new UnauthorizedException();
}
}
서버를 실행합니다.
yarn start:dev
브라우저의 콘솔 로그에 사용자 정보가 리턴된것을 확인할 수 있습니다.
이상으로 카카오로그인을 RestAPI를 이용하여 처리하는 방법에 대해 알아보았습니다.
'Nestjs 활용 동영상강좌' 카테고리의 다른 글
(풀스택) Node(Nest)와 Vue(Nuxt)로 사이트 만들기 - 05.JWT인증 (0) | 2022.10.01 |
---|---|
(풀스택) Node(Nest)와 Vue(Nuxt)로 사이트 만들기 - 04.카카오 로그인 (2) | 2022.09.24 |
(풀스택) Node(Nest)와 Vue(Nuxt)로 사이트 만들기 - 03.TypeORM 설정 (0) | 2022.09.13 |
(풀스택) Node(Nest)와 Vue(Nuxt)로 사이트 만들기 - 02.프로젝트 생성 및 Repository 연결 (0) | 2022.09.12 |
(풀스택) Node(Nest)와 Vue(Nuxt)로 사이트 만들기 - 01.강좌 소개 (0) | 2022.09.11 |
카카오 로그인(REST API)③ - Vue(nuxtjs) + Node(nestjs) (0) | 2022.07.03 |
카카오 로그인(REST API)② - Vue(nuxtjs) + Node(nestjs) (0) | 2022.07.03 |
카카오 로그인(REST API)① - Vue(nuxtjs) + Node(nestjs) (0) | 2022.07.03 |