티스토리 뷰
안녕하세요 강정호입니다
오늘은 JWT 토큰을 사용하여 로그인 기능을 개발해보겠습니다.
Passport란?
Node Js를 위한 인증 미들웨어 입니다. 어플리케이션마다 각기 다른 인증 전략을 가지고 있는데, passport에서는 여러 인증 전략을 제공하고 있다.
API 문서 : www.passportjs.org/docs/downloads/html/
Documentation
Overview Passport is authentication middleware for Node. It is designed to serve a singular purpose: authenticate requests. When writing modules, encapsulation is a virtue, so Passport delegates all other functionality to the application. This separation o
www.passportjs.org
로그인 인증 프로세스
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
- 내년은 빡세게!!
- 항해플러스백엔드
- 개발자 회고
- github
- GIT
- Spring boot
- 깃
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 재테크공부
- 열반스쿨기초반
- 관계대수
- 월부닷컴
- 도커
- 항해플러스후기
- front
- 깃허브
- Use case
- 파라메터
- 항해솔직후기
- 2023년
- 유즈케이스
- 월급쟁이부자들
- 폭포수
- Inception
- pop_back
- resize
- 인셉션
- push_back
- 부동산공부
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |