클라이언트 서버에서 소셜 로그인
416
1 asked
현재 상황
클라이언트와 서버를 각자 다른 도메인에 배포했습니다.
소셜 로그인은 passport 모듈과 session을 사용했습니다.
서버에서 소셜 로그인이 성공해도 클라이언트에는 세션 쿠키가 전달되지 않습니다.
클라이언트
axios get 요청을 보내면 cors 에러가 떠서 a 태그를 사용했습니다.
<a href="http://서버ip/auth/github">깃 헙 로그인<a/>서버
아래의 코드는 강의의 내용과 동일합니다. passport 모듈을 활용해 소셜 로그인을 구현했습니다.
import express from "express";
import passport from "passport";
import { isLoggedIn, isNotLoggedIn } from "../middlewares/authMiddleware.js";
const router = express.Router();
router.get("/github", passport.authenticate("github"));
router.get(
"/github/callback",
passport.authenticate("github", {
failureRedirect: "/",
}),
(req, res) => {
res.redirect(`http://localhost:3000`);
}
);
router.get("/logout", isLoggedIn, (req, res) => {
req.logout();
req.session.destroy();
res.json({ message: "logout" });
});
export default router;소셜 로그인에 성공하면 클라이언트 서버의 메인 페이지로 redirect 시키고 있습니다.
문의
서버에서 소셜 로그인 성공시 클라이언트 서버에도 session 쿠키를 전달하고 싶습니다.
두 개의 다른 서버에서 소셜 로그인을 어떻게 구현해야될지 모르겠습니다.
Answer 1
1
서브도메인만 다른게 아니라 도메인이 완전히 다른가요? 그러면 쿠키 공유가 사실상 어려워서 토큰으로 로그인하셔야 합니다.
0
네 맞습니다.
CSR를 위해 클라이언트가 노드 서버의 API에 요청하는 방식으로 진행해보려고 합니다.
현재 로컬 로그인은 사용하지 않고 오로지 소셜 로그인(깃헙)만 사용하고 있습니다.
로컬 로그인은 구현하지 않을 생각입니다.
제가 고민해본 방법
router.get(
"/github/callback",
passport.authenticate("github", {
failureRedirect: "/",
}),
(req, res) => {
console.log(req.headers.cookie);
res.redirect(`http://localhost:3000?cookie=${req.headers.cookie}`);
}
);
위 코드 처럼 GitHub에서 콜백 url로 노드 서버에 들어오면
쿼리를 사용해 클라이언트에 쿠키 값을 전달해 봤습니다.
하지만 클라이언트에서 쿠키를 저장하는 방법을 모르겠습니다.
저장을해도 서버에서 사용자가 로그인 한 상태인지를 모르는 것 같더라구요.
문의
만약 다른 도메인 간의 쿠키 공유가 어렵다면
passport와 jwt를 사용하면 되는건가요?
0
쿠키는 서버에 저장하는 게 아니라 브라우저에 저장하는 것이고, 프론트서버는 브라우저와 백엔드 서버간에 쿠키가 전달될 수 있도록 하면 됩니다. 위에 예시처럼 쿼리스트링에 쿠키를 넣은 경우에는 익스프레스라면 프론트서버 라우터에 res.cookie로 해서 브라우저가 쿠키를 설정할 수 있도록 해야 하고, 이 때 옵션으로 domain 옵션을 백엔드 서버 주소를 넣어야합니다. 다만 다른 도메인의 서버라서 쿠키가 생성될지 모르겠네요.
리눅스 노드 설치시 패키지
0
159
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
906
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2281
2
a[title] 질문드립니다
0
375
1
리뉴얼 강의 및 공부 방법
0
581
1
jwt decode
0
1128
1
node.js 교과서 3판 질문드립니다
0
391
1
passport와 jwt
0
432
1
리뉴얼 강의
0
419
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
353
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
481
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
505
2
nunjucks res.render('error'); 작동을 안합니다.
0
511
1
질문있습니다.
0
346
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3535
1
수업자료는 어디있나요?
0
366
1
질문 있습니디
0
235
1
multer 사용시 file 외 name값은 못받나용?
0
416
1
코드 중복 부분 질문드립니다.
0
298
1
api 만드는 이유 질문드립니다.
0
286
1
Strategy의 done에 대해 질문드립니다.
0
364
1
안녕하세요 fs 권한 관련 질문드립니다
0
449
1
시퀄라이즈 연결질문...
0
496
2
res.setHeader vs res.cookie
0
1786
3

