강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jgh9912039837
jgh9912039837

câu hỏi đã được viết

NestJS phụ trợ vững chắc, từ cơ bản đến nâng cao

chiến lược xác thực và hộ chiếu & Trang trí tùy chỉnh

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

Viết

·

822

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

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

 

ssrNestJSnodejsexpressmongodb

Câu trả lời 1

1

jgh9912039837님의 프로필 이미지
jgh9912039837
Người đặt câu hỏi

해결했습니다!

amamov님의 프로필 이미지
amamov
Người chia sẻ kiến thức

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

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

Hình ảnh hồ sơ của jgh9912039837
jgh9912039837

câu hỏi đã được viết

Đặt câu hỏi