Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // load all the things we need
- var LocalStrategy = require('passport-local').Strategy
- // var bcrypt = require('bcrypt')
- var bcrypt = require('bcryptjs')
- // load up the user model
- var mysql = require('mysql')
- const dbConfig = require('./db')
- // expose this function to our app using module.exports
- module.exports = function (passport) {
- // =========================================================================
- // passport session setup ==================================================
- // =========================================================================
- // required for persistent login sessions
- // passport needs ability to serialize and unserialize users out of session
- // used to serialize the user for the session
- passport.serializeUser(function (user, done) {
- done(null, user.id);
- });
- // used to deserialize the user
- passport.deserializeUser(function (id, done) {
- const connection = mysql.createConnection(dbConfig)
- connection.connect(function(err) {
- if (err) return done(err)
- connection.query('SELECT * FROM users WHERE id = ?', [id], function (err, results) {
- if (err) return done(err)
- connection.end()
- done(null, results.length === 1 ? results[0] : null);
- });
- })
- });
- passport.use('local-login', new LocalStrategy({
- usernameField : 'username',
- passwordField : 'password',
- passReqToCallback: true // allows us to pass back the entire request to the callback
- },
- function (req, username, password, done) { // callback with username and password from our form
- req.getConnection(function(err, connection) {
- if (err) {
- console.log('Mysql connection has not been established ', err)
- return done(err);
- }
- connection.query('SELECT * FROM users WHERE username = ?', [username], function(err, results) {
- if (err) {
- console.log('Sql query error ' + err)
- return done(err);
- }
- if(!results || results.length !== 1) {
- console.log('User not found ', username)
- return done(null, false, req.flash('loginMessage', 'Invalid credentials #1'))
- }
- bcrypt.compare(password, results[0].password, function(err, passwordsMatch) {
- if (err || !passwordsMatch) {
- console.log('Password validation error ', err, passwordsMatch)
- return done(null, false, req.flash('loginMessage', 'Invalid credentials'));
- }
- // all is well, return successful user
- return done(null, results[0]);
- })
- });
- });
- }))
- }
Add Comment
Please, Sign In to add comment