我正在尝试使用passportjs使用mysql创建一个登录函数,但它总是会在没有失败或错误消息的情况下进行重定向失败。
起初,我认为我的数据库连接存在一些问题,但我的注册功能运行正常,所以我认为我的护照配置可能有误。
库/ passport.js
01/02/2013
01/03/2013
01/04/2013
01/05/2013
01/06/2013
01/07/2013
模型/ user.js的
var passport = require('passport');
var User = require('../models/user');
var LocalStrategy = require('passport-local').Strategy;
passport.serializeUser(function(user, done) {
done(null, user.id)
});
passport.deserializeUser(function(id, done) {
connection.query('SELECT * FROM users WHERE id = ' + id, function(err, rows) {
done(err, rows[0]);
})
});
passport.use('local-login', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
},
function(req, username, password, done) {
User.findByUsername(username, function(err, users) {
if (err) throw err;
if (!users[0]) {
console.log('Unknown user');
return done(null, false, {
message: 'Unknown user'
});
}
User.comparePassword(password, users[0].password, function(err, isMatch) {
if (err) throw err;
if (isMatch)
return done(null, users[0]);
else {
console.log('Invalid password');
return done(null, false, {
message: 'Invalid password'
})
}
})
})
}));
module.exports = passport;
路由/ users.js
var bcrypt = require('bcrypt');
var mysql = require('mysql');
var connection = require('../libs/connection')
module.exports.findByUsername = function(username, callback) {
connection.query({
sql: 'SELECT * FROM users WHERE username=?',
timeout: 10000,
values: [username]
}, function(err, results, fields) {
if (err) throw err;
console.log(results);
callback(null, results);
})
}
module.exports.createUser = function(newUser, callback) {
bcrypt.hash(newUser.password, 10, function(err, hash) {
if (err) throw err;
newUser.password = hash;
connection.query({
sql: 'INSERT INTO users(full_name, username, email, password) VALUES (?, ?, ?, ?)',
timeout: 10000,
values: [newUser.name, newUser.username, newUser.email, newUser.password]
}, function(err, results, fields) {
if (err) {
callback(err);
return;
}
callback(null, results);
})
})
}
module.exports.comparePassword = function(candidatePassword, hash, callback) {
bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
if (err) return callback(err);
callback(null, isMatch);
})
}