인프런 커뮤니티 질문&답변

노른자님의 프로필 이미지

작성한 질문수

탄탄한 백엔드 NestJS, 기초부터 심화까지

passport와 인증 전략 & Custom decorator

소셜 로그인 질문 (passport-apple)

22.02.05 21:05 작성

·

685

2

저는 passport-jwt를 사용하여 로그인을 구현하였는데,

소셜 로그인을 위해 passport-apple 를 사용하여 유저 정보를 받아오려고하는데 막혔습니다.

 https://github.com/ananay/passport-apple/issues/30

nest.js에서 passport-apple사용시 Strategy 클래스의 validate함수에 인자가 제대로 들어오지않는 이슈가 있는것같습니다.

제가 유저정보를 받아온후 그것을 db에 저장후 jwt를 발행하여 다음요청부터는 애플을 거치지않고 제 서버로 jwt를 보내면 제가 유저정보 주는방식으로 구현하려고하는데,

유저 정보를 어떻게 받아와야하는지 모르겠습니다.

 

구글링해보니 idToken을 decode하면 유저정보가 들어있다고하는데,

import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { PassportStrategy } from '@nestjs/passport';
import { DecodedIdToken, Strategy, VerifyCallback } from 'passport-apple';

@Injectable()
export class AppleStrategy extends PassportStrategy(Strategy, 'apple') {
constructor(private jwtService: JwtService) {
super({
clientID: process.env.APPLE_CLIENT_ID,
teamID: process.env.APPLE_TEAM_ID,
callbackURL: process.env.APPLE_CALLBACK_URL,
keyID: process.env.APPLE_KEY_ID,
privateKeyString: process.env.APPLE_KEY.replace(/\\n/g, '\n'),
passReqToCallback: false,
});
}

async validate(
accessToken: string,
idToken: string,
profile: any,
done: VerifyCallback,
) {
const decodedIdToken: DecodedIdToken = this.jwtService.verify(idToken);
console.log(decodedIdToken);
const user = {
provider: 'apple',
snsId: decodedIdToken.sub,
password: decodedIdToken.sub,
};
console.log(user);
done(null, user);
}
}

이렇게 코드를 짜니

[Nest] 31  - 02/06/2022, 8:41:18 AM   ERROR [ExceptionsHandler] jwt malformed

JsonWebTokenError: jwt malformed

    at Object.module.exports [as verify] (/usr/src/app/node_modules/jsonwebtoken/verify.js:63:17)

    at JwtService.verify (/usr/src/app/node_modules/@nestjs/jwt/dist/jwt.service.js:37:20)

    at AppleStrategy.validate (/usr/src/app/src/auth/strategies/apple.strategy.ts:25:60)

    at AppleStrategy.<anonymous> (/usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:20:55)

    at Generator.next (<anonymous>)

    at /usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:8:71

    at new Promise (<anonymous>)

    at __awaiter (/usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:4:12)

    at AppleStrategy.callback [as _verify] (/usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:17:45)

    at /usr/src/app/node_modules/passport-oauth2/lib/strategy.js:205:24

이러한 에러가 뜹니다.

idToken을 어떻게 해독해야하는지 알수있을까요..?

혹시 실무에서 애플로그인 서비스를 구현해보셨다면 이방법말고 다른방법이라도 있다면 알려주시면 감사하겠습니다!

 

답변 1

1

노른자님의 프로필 이미지
노른자
질문자

2022. 02. 07. 14:59

해결했습니다!

윤상석님의 프로필 이미지
윤상석
지식공유자

2022. 02. 09. 18:55

아이고.. 답변이 늦었네요 ㅠㅠ 

천명기님의 프로필 이미지

2022. 02. 17. 01:14

어떻게 해결하셧는지 답변을 부탁드려도 될까요?

유영기님의 프로필 이미지

2023. 10. 02. 21:55