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

gigis님의 프로필 이미지

작성한 질문수

Apple 로그인 구현 관련 질문입니다!

작성

·

545

0

개발 환경은 node.js이며 express를 활용해 개발중입니다.

passport apple을 사용해서 apple 로그인을 구현해 보려고 하는데

어려움을 겪고 있어서 질문을 드립니다.

비슷한 사례의 질문이 인프런 질문 게시판에도 있는 것 같아 참고해봤지만 ㅠㅠ

해결하지 못하고 시간만 계속 쓰고 있는 상황입니다.

 

제가 직면한 문제는 passport apple을 써서 로그인 기능을 만들어 보려고 테스트를

하는데 로그인 인증 사이트로 간 다음 로그인을 하고 계속하기를 누르면

 

{

"name": "InternalOAuthError",

"message": "Failed to obtain access token",

"oauthError": "AppleAuth Error – Error occurred while signing: Error: error:1E08010C:DECODER routines::unsupported"

}

 

이와 같은 에러가 출력이 됩니다.

privateKeyString 부분을 지금 코드에서 주석 처리를 하면 다음과 같은 애러가 출력되구요

 

{

"name": "InternalOAuthError",

"message": "Failed to obtain access token",

"oauthError": "AppleAuth Error – Error occurred while signing: Error: secretOrPrivateKey must have a value"

}

제가 여기서 궁금한게 키 값이 빠진 경우에도 access token을 가지고오지 못하고, 넣은 경우에도 가지고 오지 못하는 상황이 키 파일 자체가 손상이 된건지, 아니면 코드에서 문제가 있는 것인지 모르겠습니다.

 

키파일은 혹시나 싶어서 세 차례 정도 다시 기존에 있던 키 파일을 삭제하고 만든 것입니다.

비슷한 사례가 분명 앞 전에 있었지만 저는 해당 방법처럼 시도해봤는데도 여전히 idToken 값이나 어떤 값도 로그에 찍히지 않네요 ㅠㅠ

require("dotenv").config();
const dotenv = require('dotenv');
const fs = require('fs');
const path = require('path');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser')
const express = require('express');
const session = require('express-session');
const passport = require('passport');
const AppleStrategy = require('passport-apple').Strategy;
const cors = require('cors');
const app = express();

app.use(
    session({
        resave: false,
        saveUninitialized: false,
        secret: 'keyboard cat'
    })
);

app.use(passport.initialize());
app.use(passport.session());

app.use(bodyParser.urlencoded({ extended: true }));

passport.serializeUser(function(user, cb) {
    cb(null, user);
});

passport.deserializeUser(function(obj, cb) {
    cb(null, obj);
});

// console.log('어디에있니')
// console.log(path.parse( 'AuthKey_874WAUN372.p8', ));
// console.log(path.join(__dirname, './config/AuthKey_874WAUN372.p8'));
passport.use(
    'apple',
    new AppleStrategy(
        {
            clientID: 'com.herokuapp.applelogin',
            teamID: '3L7RW74HCJ', 
            keyID: 'AGNLP55NBT',
            privateKeyString : `-----BEGIN PRIVATE KEY-----
            ----- 간략히 9AgEGCCqGSM49AwEHBHkwdwIBAQQgwI65IK8xMkJ2gOMV
            EoMBjFzlslUrIb7CCh/yg1dcTgigCgYIKoZIzj0DAQehRANCAASuAP+Ni4skreFO
            zHyy68-----간략히
            -----END PRIVATE KEY-----`,
            // privateKeyLocation: fs.readFileSync(path.join(__dirname,'./config/AuthKey_AGNLP55NBT.p8')),
            passReqToCallback: true,
            callbackURL: 'https://applelogint.herokuapp.com/auth/apple',
            
        },
        
        function(req, accessToken, refreshToken, idToken, profile , cb) {
        console.log(req, accessToken, refreshToken, idToken, profile , cb)
            if (req.body && req.body.user) {
                // Register your user here!
          console.log(req.body.user);
      }
          cb(null, idToken);
        }
    )
);


app.use(cors());



app.get('/', (req, res) => {
    res.send('<a href="/login">Sign in with Apple</a>');
});

app.get("/login", passport.authenticate('apple'), (req, res) =>{
    
});

app.post("/auth/apple", function(req, res, next) {
	passport.authenticate('apple', function(err, user, info)  {
		console.log('통과하나? auth 콜백 포인트');
        if (err) {
			if (err == "AuthorizationError") {
                console.log('auth')
				res.send("Oops! Looks like you didn't allow the app to proceed. Please sign in again! <br /> \
				<a href=\"/login\">Sign in with Apple</a>");
			} else if (err == "TokenError") {
                console.log('token')
				res.send("Oops! Couldn't get a valid token from Apple's servers! <br /> \
				<a href=\"/login\">Sign in with Apple</a>");
			} else {
				res.send(err);
			}
		} else {
			if (req.body.user) {
				// Get the profile info (name and email) if the person is registering
				res.json({
					user: req.body.user,
					idToken: user
				});
			} else {
				res.json(user);
                console.log('여기로 바로 떨어진건가?')
			}			
		}
	})(req, res, next);
});



const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`App is running on port ${ PORT }`);
});

 

 

답변 1

0

안녕하세요, 같은 문제를 겪고있는 개발자입니다.

혹시 문제 해결하셨나요,,? ㅠㅠ

gigis님의 프로필 이미지

작성한 질문수

질문하기