View difference between Paste ID: HAxeWuC1 and u3bc1igv
SHOW: | | - or go back to the newest paste.
1-
	// config/passport.js
1+
2
var LocalStrategy = require('passport-local').Strategy
3-
// =========================================================================
3+
4-
// LOCAL LOGIN =============================================================
4+
5-
// =========================================================================
5+
6-
// we are using named strategies since we have one for login and one for signup
6+
7-
// by default, if there was no name, it would just be called 'local'
7+
8-
// config/passport.js
8+
9
// expose this function to our app using module.exports
10
module.exports = function (passport) {
11
12
  // =========================================================================
13
  // passport session setup ==================================================
14
  // =========================================================================
15
  // required for persistent login sessions
16
  // passport needs ability to serialize and unserialize users out of session
17
18
  // used to serialize the user for the session
19
  passport.serializeUser(function (user, done) {
20
    done(null, user.id);
21
  });
22
23
  // used to deserialize the user
24
  passport.deserializeUser(function (id, done) {
25
    const connection = mysql.createConnection(dbConfig)
26
    connection.connect(function(err) {
27
      if (err) return done(err)
28
      connection.query('SELECT * FROM users WHERE id = ?', [id], function (err, results) {
29
        if (err) return done(err)
30
        connection.end()
31
        done(null, results.length === 1 ? results[0] : null);
32
      });
33
    })
34
  });
35
36
  passport.use('local-login', new LocalStrategy({
37
      usernameField : 'username',
38
      passwordField : 'password',
39
      passReqToCallback: true // allows us to pass back the entire request to the callback
40
    },
41
    function (req, username, password, done) { // callback with username and password from our form
42
        req.getConnection(function(err, connection) {
43
          if (err)  { 
44
            console.log('Mysql connection has not been established ', err)
45
            return done(err);
46
          }
47
48
          connection.query('SELECT * FROM users WHERE username = ?', [username], function(err, results) {
49
            if (err) {
50
              console.log('Sql query error ' + err)
51
              return done(err);
52
            }
53
54
            if(!results || results.length !== 1) { 
55
              console.log('User not found ', username)
56
              return done(null, false, req.flash('loginMessage', 'Invalid credentials #1'))
57
58
            }
59
60
            bcrypt.compare(password, results[0].password, function(err, passwordsMatch) {
61
              if (err || !passwordsMatch) {
62
                console.log('Password validation error ', err, passwordsMatch)
63
                return done(null, false, req.flash('loginMessage', 'Invalid credentials'));
64
              }
65
              // all is well, return successful user
66
              return done(null, results[0]);
67
            })
68
          });
69
70
        });
71
    }))
72
73
}