일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Filter
- map
- extends
- reactnative
- interface
- code-push-standalone
- meatadata
- 스크롤이벤트
- 글또10기x코드트리
- set
- 페이지네이션
- TS
- react
- javascript
- Next.js
- array
- app.post
- generic
- codepush
- xlsx-js-style
- supabase 페이지네이션
- supabase authentication
- 상속
- 이진탐색
- 슬라이딩윈도우
- Spring
- 코드푸시
- 타입스크립트
- async
- supabase auth
- Today
- Total
rhanziy
node.js - session 방식으로 로그인 구현하기 본문
로그인, 로그인 검증, 세션생성을 도와주는 라이브러리 총 3개 설치
(실제 서비스시 express-session 말고 MongoDB에 세션데이터를 저장해주는 라이브러리를 이용하자.)
express-session 라이브러리는 세션이 많아지면 서버의 메모리를 많이 잡아먹기 때문에 connect-mongo 등의 라이브러리로 DB에 세션데이터를 저장해서 사용하기
npm install passport passport-local express-session
server.js에 추가할 코드. app.use() 는 요청과 응답사이에 뭔가 실행해줄 코드를 뜻하며 미들웨어임.
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const session = require('express-session');
app.use(session({secret : '비밀코드', resave : true, saveUninitialized: false}));
app.use(passport.initialize());
app.use(passport.session());
login.ejs 파일 생성 후 server.js에 페이지 렌더링 해주고~
login.ejs 파일에는 아이디, 비밀번호를 입력하는 input 태그가 들어가며, name 속성은 각각 id와 pw임
app.get('/login', function(요청, 응답){
응답.redirect('/')
});
test를 위해 몽고db에 login컬렉션을 만들고 id:test / pw:test 로 새 도큐먼트를 생성해준다.
이제 로그인을 하면(POST) 중간에 검사하는 코드.
app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){
응답.redirect('/')
});
url 다음 코드는 passport 라는 라이브러리가 제공하는 '아이디 비번 인증도와주는 코드'이다.
응답해주기 전에 local 방식으로 아이디 비번을 인증해주세요. 라는 뜻.
(failureRedirect라는 부분은 로그인 인증 실패 시 이동시켜줄 경로를 적자. 위의 코드는 실패시 /fail 경로로 유저를 이동시켜줌.)
세부 추가 코드작성은 passport 라이브러리 예제 복붙
passport.use(new LocalStrategy({
usernameField: 'id',
passwordField: 'pw',
session: true,
passReqToCallback: false,
}, function (입력한아이디, 입력한비번, done) {
//console.log(입력한아이디, 입력한비번);
db.collection('login').findOne({ id: 입력한아이디 }, function (에러, 결과) {
if (에러) return done(에러)
if (!결과) return done(null, false, { message: '존재하지않는 아이디요' })
if (입력한비번 == 결과.pw) {
return done(null, 결과)
} else {
return done(null, false, { message: '비번틀렸어요' })
}
})
}));
new LocalStrategy() 에서 local 방식으로 아이디/비번 검사를 어떻게 할지 도와주는 부분이라고 보면 됨
LocalStrategy( { 설정 }, function(){ 아이디비번 검사하는 코드 } ) 이런 흐름
아래는 설정 부분 상세설명이다.
passport.use( new LocalStrategy({
usernameField: 'id', (요기는 사용자가 제출한 아이디가 어디 적혔는지 name 속성 이름)
passwordField: 'pw', (요기는 사용자가 제출한 비번이 어디 적혔는지 name 속성 이름)
session: true, (요기는 세션을 만들건지)
passReqToCallback: false, (요기는 아이디/비번말고 다른 정보검사가 필요한지)
});
+ 지금은 보안이나 암호화과정이 생략된 코드인것을 감안하자.
세션만들고 세션 아이디 발급해서 쿠키로 보내주기
server.js에 입력하면 된다.
passport.serializeUser(function (user, done) {
done(null, user.id)
});
// serializeUser 함수는 유저의 id데이터를 바탕으로 세션데이터를 만들어주고
// 그 세션데이터의 아이디를 쿠키로 만들어 사용자의 브라우저로 보내준다.
passport.deserializeUser(function (아이디, done) {
done(null, {})
});
// 로그인 된 유저가 마이페이지에 접속했을 때 실행되는 함수
'Node.js' 카테고리의 다른 글
node.js - 환경변수 관리(.env) (1) | 2023.03.21 |
---|---|
node.js - mypage 기능 (0) | 2023.03.20 |
node.js - method-override 라이브러리 PUT 구현 (0) | 2023.03.20 |
node.js - detail 상세페이지(params.id) (0) | 2023.03.20 |
node.js - ajax 삭제요청 (0) | 2023.03.20 |