inflearn logo
강의

講義

知識共有

[リニューアル] Node.js教科書 - 基本からプロジェクト実習まで

JWTトークンの使用

클라이언트 서버에서 소셜 로그인

416

inthegarden442

投稿した質問数 1

0

현재 상황

클라이언트와 서버를 각자 다른 도메인에 배포했습니다.

소셜 로그인은 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 쿠키를 전달하고 싶습니다.

두 개의 다른 서버에서 소셜 로그인을 어떻게 구현해야될지 모르겠습니다.

passport mysql 소셜로그인 nodejs mongodb Sequelize

回答 1

1

zerocho

서브도메인만 다른게 아니라 도메인이 완전히 다른가요? 그러면 쿠키 공유가 사실상 어려워서 토큰으로 로그인하셔야 합니다.

0

inthegarden442

네 맞습니다.

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

inthegarden442

그리고 제로초 님 덕분에 정말 재미있게 공부하고 있습니다. 책, 강의, 블로그 모두 꼼꼼히 보며 공부 중입니다. 감사드립니다.

0

zerocho

쿠키는 서버에 저장하는 게 아니라 브라우저에 저장하는 것이고, 프론트서버는 브라우저와 백엔드 서버간에 쿠키가 전달될 수 있도록 하면 됩니다. 위에 예시처럼 쿼리스트링에 쿠키를 넣은 경우에는 익스프레스라면 프론트서버 라우터에 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