작성
·
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 }`);
});