티스토리 뷰
안녕하세요 강정호입니다
오늘은 JWT 토큰을 사용하여 로그인 기능을 개발해보겠습니다.
Passport란?
Node Js를 위한 인증 미들웨어 입니다. 어플리케이션마다 각기 다른 인증 전략을 가지고 있는데, passport에서는 여러 인증 전략을 제공하고 있다.
API 문서 : www.passportjs.org/docs/downloads/html/
로그인 인증 프로세스
1. server.js 에서 authenticate 함수 호출
import "./env.js"
// graphql-yoga는 Graphql 서버를 쉽게 실행시켜 주는 도구
import { GraphQLServer } from "graphql-yoga";
import passport from "passport";
import logger from "morgan";
import schema from "./schema";
import {sendSecretMail} from "./utils";
import { authenticateJwt } from "./passport";
console.log(process.env.PORT);
const PORT = process.env.PORT || 4000;
// GraphQL 서버 객체 생성
const server = new GraphQLServer({
schema ,
context: ({request}) => ({request})
});
server.express.use(logger("dev"));
/* 서버 실행시 authenticateJwt 함수 호출 */
server.express.use(authenticateJwt);
server.start({port : PORT}, () => console.log(`Server running on port http://localhost:${PORT}`));
2. passport.js
import passport from "passport";
import { Strategy, ExtractJwt } from "passport-jwt";
import dotenv from "dotenv";
import path from "path";
import { prisma } from "../generated/prisma-client";
dotenv.config({path: path.resolve(__dirname, ".env") });
/** 역할 : */
const jwtOptions = {
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: process.env.JWT_SECRET
};
const verifyUser = async (payload, done) => {
try{
const user = await prisma.user({id: payload.id})
if(user != null){
return done(null, user);
}else{
return done(null, false);
}
}catch{
return done(error, false);
}
};
/** 서버 실행시 authenticateJwt 함수 호출됨 */
export const authenticateJwt = (req, res, next) =>
passport.authenticate("jwt", {sessions: false}, (error, user) => {
if(user){
req.user = user;
}
next();
})(req, res, next);
passport.use(new Strategy(jwtOptions, verifyUser));
passport.initialize();
passport.authenticate 함수
Json Web Token 방식을 인증 전략(Strategy)로 사용하기 때문에 authenticate 첫 인자로 "jwt"를 입력하였습니다.
카카오나 페이스북으로 인증을 하려면 인자값이 바뀝니다.
new JwtStrategy(options, verify)
- options : 인증 요청 또는 검증시에 어떻게 토큰을 추출할 것인지 방법
- verify : payload를 가지는
'프로젝트' 카테고리의 다른 글
[인스타그램 클론코딩] #3.9 toggleLike and addComment Resolver (0) | 2020.09.07 |
---|---|
[인스타그램 클론코딩] #3.8 toggleLike Resolver Part one (0) | 2020.09.07 |
[인스타그램 클론코딩] #3.5 Passport JWT part one (0) | 2020.08.30 |
[인스타그램 클론코딩] #3.4 requestSecret Resolver (0) | 2020.08.21 |
[인스타그램 클론코딩] #3.2 Create Account Resolver (0) | 2020.08.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파라메터
- Spring boot
- 재테크공부
- Use case
- 항해솔직후기
- Inception
- 폭포수
- front
- 항해플러스백엔드
- resize
- docker
- 도커
- 내년은 빡세게!!
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 항해플러스후기
- GIT
- 관계대수
- 개발자 회고
- 인셉션
- 월급쟁이부자들
- push_back
- 열반스쿨기초반
- 2023년
- pop_back
- 유즈케이스
- 깃
- 월부닷컴
- 깃허브
- 부동산공부
- github
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함