728x90
출처
- NodeJS Passport login script with MySQL database
- node.js 사용자에게 메시지 날리기 connect-flash : 네이버 블로그
- 15장 passport 모듈을 이용한 사용자 인증 (2) :: GoodBye World
/config/dbHelper.js
const mariadb = require('mariadb');
var config = require('./db_config'); // ./는 현재 디렉토리를 나타냅니다
const pool = mariadb.createPool({
host: config.host,
port: config.port,
user: config.user,
password: config.password,
database: config.database,
connectionLimit: 5
});
function dbHelper() {
//
this.getConnection = function(callback) {
pool.getConnection()
.then(conn => {
callback(conn);
}).catch(err => {
//not connected
});
};
//
this.getConnectionAsync = async function() {
try {
let conn = await pool.getConnection();
// console.log("conn = " + conn); // { affectedRows: 1, insertId: 1, warningStatus: 0 }
return conn;
} catch (err) {
throw err;
}
return null;
};
//
this.sendJSON = function(response, httpCode, body) {
var result = JSON.stringify(body);
response.send(httpCode, result);
};
}
module.exports = new dbHelper();
/config/passport.js
var dbHelper = require('./dbHelper');
const LocalStrategy = require('passport-local').Strategy;
module.exports = (passport) => {
// 로그인이 성공하면, serializeUser 메서드를 이용하여 사용자 정보를 Session에 저장할 수 있다.
passport.serializeUser((user, done) => {
console.log('serialize');
done(null, user);
});
// 인증 후, 페이지 접근시 마다 사용자 정보를 Session에서 읽어옴.
passport.deserializeUser((user, done) => {
console.log('deserialize');
done(null, user);
});
passport.use(new LocalStrategy({
usernameField : 'userid',
passwordField : 'password',
passReqToCallback : true
},
// 인증 요청
function(req, userid, password, done) {
if(!userid || !password ) { return done(null, false, req.flash('message','All fields are required.')); }
dbHelper.getConnection(function(conn) {
console.log('conn = ' + conn);
conn.query("select * from member where email = ?", [userid]).then((rows) => {
// console.log(rows);
if(!rows.length) {
return done(null, false, req.flash('message','Invalid username or password.'));
}
var dbPassword = rows[0].password;
if(!(dbPassword == password)) {
return done(null, false, req.flash('message','Invalid username or password.'));
}
return done(null, rows[0]);
})
.then((res) => {
console.log('res = '+res); // { affectedRows: 1, insertId: 1, warningStatus: 0 }
conn.end();
})
.catch(err => {
//handle error
console.log(err);
conn.end();
if (err) return done(req.flash('message',err));
});
});
}
));
};
웹페이지에 값 전달 (connect-flash 모듈)
/app.js
var flash = require('connect-flash');
app.use(passport.session()); //로그인 세션 유지
app.use(flash());728x90