Node.js 서버 구조4: passport 모듈과 로그인 구현
코드 구조
콘솔
- 콘솔에 ' npm i passport passport-local passport-kakao bcrypt ' 입력하여 모듈 설치
app.js
- 모듈 가져오기
const passport = require('passport');
- 작성한 모듈 가져오기
const passportConfig = require('./passport');
3.작성한 모듈 실행하기
passportConfig(); // 패스포트 설정
- 모듈 passport의 메서드를 미들웨어로서 실행하기
- passport.initialize 미들웨어: 요청에 passport 설정을 심는다
- passport.session 미들웨어: req.session 객체에 passport 정보를 저장한다 (단, express-session 미들웨어보다 뒤에 연결해야 함)
app.use(passport.initialize());
app.use(passport.session());
passport/index.js
- 로그인 개요
(로그인의 과정)
1)라우터를 통해 로그인 요청이 들어옴
2)라우터에서 passport.authenticate메서드 호출
3)로그인 전략 수행
4)로그인 성공 시 사용자 정보 객체와 함께 req.login 호출
5)req.login메서드가 passport.serializeUser 호출
6)req.session에 사용자 아이디만 저장
7)로그인 성공
(로그인 이후의 과정)
1)요청이 들어옴
2)라우터에 요청이 도달하기 전에 passport.session 미들웨어가 passport.deserializeUser 메서드 호출
3)req.session에 저장된 아이디로 데이터베이스에서 사용자 조회
4)조회된 사용자 정보를 req.user에 저장
5)라우터에서 req.user객체 사용 가능
- 로그인 시의 동작: strategy
- 모듈과 작성한 모듈, 모델 가져오기
const passport = require('passport')
const local = require('./localStrategy');
const kakao = require('./kakaoStrategy');
const User = require('../models/user');
- 모듈 내보내기 + 함수 2개 사용하기
- passport.serializeUser:
사용자 정보 객체를 세션(req.session 객체)에 아이디로 저장. 로그인 시 실행됨.
- passport.deserializeUser:
세션에 저장한 아이디를 통해 사용자 정보 객체를 불러옴
매 요청시 실행됨. passport.session 미들웨어가 이 메서드를 호출.
- cf. done 함수 :
첫 번째 인수> 에러 발생 시 사용
두 번째 인수> 저장하고 싶은 데이터
module.exports = () => {
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findOne({ where: { id } })
.then(user => done(null, user))
.catch(err => done(err));
});
local();
kakao();
};
Author And Source
이 문제에 관하여(Node.js 서버 구조4: passport 모듈과 로그인 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@nahyunbak/Node.js-서버-구조4-passport-모듈과-로그인-구현
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 콘솔에 ' npm i passport passport-local passport-kakao bcrypt ' 입력하여 모듈 설치
- 모듈 가져오기
const passport = require('passport');
- 작성한 모듈 가져오기
const passportConfig = require('./passport');
3.작성한 모듈 실행하기
passportConfig(); // 패스포트 설정
- 모듈 passport의 메서드를 미들웨어로서 실행하기
- passport.initialize 미들웨어: 요청에 passport 설정을 심는다
- passport.session 미들웨어: req.session 객체에 passport 정보를 저장한다 (단, express-session 미들웨어보다 뒤에 연결해야 함)
app.use(passport.initialize());
app.use(passport.session());
- 로그인 개요
(로그인의 과정)
1)라우터를 통해 로그인 요청이 들어옴
2)라우터에서 passport.authenticate메서드 호출
3)로그인 전략 수행
4)로그인 성공 시 사용자 정보 객체와 함께 req.login 호출
5)req.login메서드가 passport.serializeUser 호출
6)req.session에 사용자 아이디만 저장
7)로그인 성공
(로그인 이후의 과정)
1)요청이 들어옴
2)라우터에 요청이 도달하기 전에 passport.session 미들웨어가 passport.deserializeUser 메서드 호출
3)req.session에 저장된 아이디로 데이터베이스에서 사용자 조회
4)조회된 사용자 정보를 req.user에 저장
5)라우터에서 req.user객체 사용 가능
- 로그인 시의 동작: strategy
- 모듈과 작성한 모듈, 모델 가져오기
const passport = require('passport')
const local = require('./localStrategy');
const kakao = require('./kakaoStrategy');
const User = require('../models/user');
- 모듈 내보내기 + 함수 2개 사용하기
- passport.serializeUser:
사용자 정보 객체를 세션(req.session 객체)에 아이디로 저장. 로그인 시 실행됨. - passport.deserializeUser:
세션에 저장한 아이디를 통해 사용자 정보 객체를 불러옴
매 요청시 실행됨. passport.session 미들웨어가 이 메서드를 호출.
- cf. done 함수 :
첫 번째 인수> 에러 발생 시 사용
두 번째 인수> 저장하고 싶은 데이터
module.exports = () => {
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findOne({ where: { id } })
.then(user => done(null, user))
.catch(err => done(err));
});
local();
kakao();
};
Author And Source
이 문제에 관하여(Node.js 서버 구조4: passport 모듈과 로그인 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nahyunbak/Node.js-서버-구조4-passport-모듈과-로그인-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)