일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- InfluxDB
- 정규식 문자열 출력
- telegraf
- centos pyhon 설치
- gcc regex
- snmp
- 백준
- linux시간으로 변경
- gcc 업데이트
- c3 second
- python subprocess
- python os
- grafana dashboard
- c3 축 가리기
- c3 초
- subporcess path
- c3 축 없애기
- influxdb 설치
- semanage
- c3 step graph
- c++ 정규식
- selinux port 등록
- g++ 업데이트
- regex_search
- 정규식 활용
- snmp test
- python popen
- CentOS7
- 정규식 컴파일
- 1697
- Today
- Total
리셋 되지 말자
[NodeJS] Passport 세션이용 본문
not in use
const express = require('express')
const app = express()
const port = 80
var compression = require('compression')
var bodyParser = require('body-parser');
var pageRouter = require('./routes/page');
var indexRouter = require('./routes/index');
var authorRouter = require('./routes/author');
var authRouter = require('./routes/auth');
var helmet = require('helmet')
var session = require('express-session');
var FileStore = require('session-file-store')(session);
app.use(helmet());
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(session({
secret: 'sknfienf123',
resave: false,
saveUninitialized: true,
store:new FileStore()
}))
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function (user, done) {
console.log('serialize', user);
done(null, user.email);
});
passport.deserializeUser(function (id, done) {
console.log('deserialize', id);
done(null, authData);
});
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'pwd'
},
function (username, password, done) {
const authData = {
email:'rudwns273@naver.com',
password:'12345',
nickname:'rudwns'
}
console.log(username, password);
if(username==authData.email){
if(password==authData.password){
console.log(1);
done(null, authData);
}else{
return done(null, false, {
message: 'Incorrect password.'
});
}
}else{
return done(null, false, {
message: 'Incorrect username.'
});
}
}
));
app.post('/auth/login_process',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/auth/login' }
));
이전 게시물의 오류내용대로 passport.initialize()를 해준다.
위의 설명을 참고하여 코드에 반영한다.
const express = require('express')
const app = express()
const port = 80
var compression = require('compression')
var bodyParser = require('body-parser');
var pageRouter = require('./routes/page');
var indexRouter = require('./routes/index');
var authorRouter = require('./routes/author');
var authRouter = require('./routes/auth');
var helmet = require('helmet')
var session = require('express-session');
var FileStore = require('session-file-store')(session);
app.use(helmet());
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(session({
secret: 'sknfienf123',
resave: false,
saveUninitialized: true,
store:new FileStore()
}))
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'pwd'
},
function (username, password, done) {
const authData = {
email:'rudwns273@naver.com',
password:'12345'
}
console.log(username, password);
if(username==authData.email){
if(password==authData.password){
console.log(1);
done(null, authData);
}else{
return done(null, false, {
message: 'Incorrect password.'
});
}
}else{
return done(null, false, {
message: 'Incorrect username.'
});
}
}
));
app.post('/auth/login_process',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/auth/login' }
));
passport.initialize()와 passport.session()을 use 한다.
- 실행 결과
serialize 오류가 뜬다 이걸로 다시 검색을 해본다.
passport가 session을 이용할 때의 사용법을 찾을 수 있다.
- 코드 반영
const express = require('express')
const app = express()
const port = 80
var compression = require('compression')
var bodyParser = require('body-parser');
var pageRouter = require('./routes/page');
var indexRouter = require('./routes/index');
var authorRouter = require('./routes/author');
var authRouter = require('./routes/auth');
var helmet = require('helmet')
var session = require('express-session');
var FileStore = require('session-file-store')(session);
app.use(helmet());
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(session({
secret: 'sknfienf123',
resave: false,
saveUninitialized: true,
store:new FileStore()
}))
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function (user, done) {
console.log('serialize', user);
// done(null, user.id);
});
passport.deserializeUser(function (id, done) {
console.log('deserialize', id);
// User.findById(id, function (err, user) {
// done(err, user);
// });
});
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'pwd'
},
function (username, password, done) {
const authData = {
email:'rudwns273@naver.com',
password:'12345'
}
console.log(username, password);
if(username==authData.email){
if(password==authData.password){
console.log(1);
done(null, authData);
}else{
return done(null, false, {
message: 'Incorrect password.'
});
}
}else{
return done(null, false, {
message: 'Incorrect username.'
});
}
}
));
app.post('/auth/login_process',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/auth/login' }
));
serializeUser는 로그인에 성공했을 때, 콜백함수가 실행되도록 되어있다.
로그인에 성공했을 때, 콘솔에 출력되는 것을 확인할 수 있다. 즉, 로그인 성공 시 authData를 전송했고, 전송한 정보를 첫 번째 인자로 받는 콜백 함수를 실행한다.
passport.serializeUser(function (user, done) {
console.log('serialize', user);
done(null, user.email);
// done(null, user.id);
});
로그인에 성공하면 done 함수를 호출하는데, 첫번째 인자로는 null, 두 번째 인자론느 사용자를 식별할 수 있는 식별자를 준다. 여기서 식별자는 email이므로 user.email을 준다.
코드 실행
지금까지의 코드를 실행해보자.
const express = require('express')
const app = express()
const port = 80
var compression = require('compression')
var bodyParser = require('body-parser');
var pageRouter = require('./routes/page');
var indexRouter = require('./routes/index');
var authorRouter = require('./routes/author');
var authRouter = require('./routes/auth');
var helmet = require('helmet')
var session = require('express-session');
var FileStore = require('session-file-store')(session);
app.use(helmet());
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(session({
secret: 'sknfienf123',
resave: false,
saveUninitialized: true,
store:new FileStore()
}))
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function (user, done) {
console.log('serialize', user);
done(null, user.email);
});
passport.deserializeUser(function (id, done) {
console.log('deserialize', id);
done(null, authData);
});
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'pwd'
},
function (username, password, done) {
const authData = {
email:'rudwns273@naver.com',
password:'12345',
nickname:'rudwns'
}
console.log(username, password);
if(username==authData.email){
if(password==authData.password){
console.log(1);
done(null, authData);
}else{
return done(null, false, {
message: 'Incorrect password.'
});
}
}else{
return done(null, false, {
message: 'Incorrect username.'
});
}
}
));
app.post('/auth/login_process',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/auth/login' }
));
deserializeUser함수도 주석을 제거해주었다.
- index.js
router.get('/', (req, res) => {
console.log('main', req.user);
db.query('SELECT * FROM topic', function (error, topics) {
//console.log('/', req.user);
if (error) throw error;
var description = 'Hello, Node.js';
var title = 'Welcome';
var list = template.list(topics);
var html = template.html(title, list, `<h2>${title}</h2>
${description}
`, `<a href="/page/create">create</a>`,
auth.statusUI(req, res));
res.send(html);
});
});
로그인을 하면, request에 'user'라는 객체가 들어있어야 한다. 이것을 확인하기 위해 '/'로 접속 시, req.user를 출력해보도록 하였다.
- 결과
접속했을 때, 로그인을 안한 상태이므로 req.user가 undefined 상태이다. 그리고 로그인을 했을 때, serializeUser가 실행이 되었는데, request에 user가 생성되지 않았다.
sessions의 쿠키를 확인해 보아도, user.id로 건네준 email 값이 없다.
다음 글에서 이 문제를 해결하도록 하자.
'NodeJS > 생활코딩' 카테고리의 다른 글
[NodeJS] Passport 로그아웃 (0) | 2020.10.05 |
---|---|
[NodeJS] Passport 로그인 확인 (0) | 2020.10.05 |
[NodeJS] Passport 인증 구현 및 자격 확인 (0) | 2020.09.28 |
[NodeJS] Passport 설치 (0) | 2020.09.28 |
[express] session 추가사항 (0) | 2020.09.28 |