클라이언트 서버에서 소셜 로그인
416
投稿した質問数 1
현재 상황
클라이언트와 서버를 각자 다른 도메인에 배포했습니다.
소셜 로그인은 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 쿠키를 전달하고 싶습니다.
두 개의 다른 서버에서 소셜 로그인을 어떻게 구현해야될지 모르겠습니다.
回答 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

