inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

passport와 인증 전략 & Custom decorator

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

842

노른자

작성한 질문수 81

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을 어떻게 해독해야하는지 알수있을까요..?

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

 

ssr NestJS nodejs express mongodb

답변 1

1

노른자

해결했습니다!

0

윤상석

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

0

천명기

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

0

유영기

https://velog.io/@youngkiu/passport-oauth2
구현 성공했습니다.

프로젝트 환경 세팅할 때 최신 노드 버젼을 사용하시는 분들은 참고하셔도 좋을 것 같아요~

2

80

1

DTO에 대한 질문

1

87

2

백엔드 MVC에서 View의 역할은 무엇인가요?

1

93

2

추가 업데이트 관련 건

0

90

2

nest js 버전문제

0

79

2

mongdb 스키마 공식 문서와 형태가 다른 이유 궁금합니다.

0

103

1

라인 끝에 에러 표시(eslint) 때문에 구글 찾아 보니.

0

74

1

전체 고양이 조회 라우터 중 error.message 오류

0

67

1

캡슐화 추가 설명 중 단일책임원칙 관련 질문

0

104

0

42강 고양이끼리 소통 댓글 구현 중 Schema hasn't been registered for model 'comments' 에러 해결

0

81

1

채팅 이슈

0

133

1

모듈이 더 이상 지원하지 않는답니다

0

206

1

오류가 있습니다

0

106

1

import 에서 오류가 납니다

0

127

1

이런 오류가 나옵니다

0

100

1

에러가 발생합니다

0

109

1

프론트 에러 뜨는데 수정 안해주시나요

0

156

1

emit() broadcast.emit() 질문있습니다

0

101

1

서버연결이 안됩니다.

1

403

1

[PM2][ERROR] Command not found

0

519

1

S3에 업로드까지는 성공했는데 사진이 나오지 않습니다.

0

248

1

error_code : Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.ts(2339)

0

601

1

jwt를 따로 연습하고 있는데 env를 못읽는 것 같습니다.

0

322

2

Ec2로 안하시는 이유가 있을까요?

0

343

1