nodejs护照login

我使用mongoose在nodejs上设置了护照,以允许用户login并创build新帐户。 创build新帐户正在工作,但login部分没有。

users.js

var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var mongoose = require('mongoose'); var User = require('../models/user'); router.get('/login', function(req, res, next) { res.render('login', { 'title': 'Login' }); }); passport.serializeUser(function(user, done){done(null, user);}); passport.deserializeUser(function(id, done){ User.getUserById(id, function(err, user){ done(err, user); }); }); passport.use(new LocalStrategy( function(username, password, done){ User.getUserByUsername(username, function(err, user){ if(err) throw err; if(!user){ console.log('Unknown User'); return done(null, false,{message: 'Unknown User'}); } User.comparePassword(password, user.password, function(err, isMatch){ if(err) throw err; if(isMatch){ return done(null, user); }else{ console.log('Invalid Password'); return done(null, false, {message: 'Invalid password'}); } }); }); } )); router.post('/login', passport.authenticate('local', {successRedirect: '/',failureRedirect: '/users/register', failureFlash:'Invalid username or password'}), function(req,res){ console.log('Authentication Successful'); req.flash('success', 'You are logged in'); res.redirect('/'); }); 

../models/user.js

 var mongoose = require('mongoose'); var bcrypt = require('bcrypt'); mongoose.connect('mongodb://localhost/nodeauth'); var db = mongoose.connection; var UserSchema = mongoose.Schema({ username: { type: String, index: true }, password: { type: String, required: true, bcrypt: true }, email:{ type: String }, name:{ type: String }, profileimage:{ type: String } }); var User = module.exports = mongoose.model('User', UserSchema); module.exports.comparePassword = function(candidatePassword, hash, callback){ bcrypt.compare(candidatePassword, hash, function(err, isMatch){ if(err) return callback(err); callback(null,isMatch); }); } module.exports.getUserById = function(id, callback){ User.findById(id, callback); } module.exports.getUserByUsername = function(username, callback){ var query = {username: username}; User.findOne(query, callback); } module.exports.createUser = function(newUser, callback){ bcrypt.hash(newUser.password, 10, function(err, hash){ if(err) throw err; // Set hashed pw newUser.password = hash; // Create User newUser.save(callback); }); } 

如果我创build新用户比正在工作的数据上传MongoDB,但如果我尝试login它只是把我放到/用户/注册页面我没有任何错误

那么它没有做任何事情,因为你的login路线没有调用任何东西…检查http://passportjs.org/docs上的文档,看看护照是如何工作的。

在user.js中,你需要类似的东西

 router.get('/login', passport.authenticate('local'), function(req, res) { res.render('login', { 'title': 'Login' }); }); 

然后在一个单独的文件中,您需要设置您的身份validation策略,例如:

 var passport = require('passport') , LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } )); 

查看本教程,了解如何实施本地身份validation策略。 http://code.tutsplus.com/tutorials/authenticating-nodejs-applications-with-passport–cms-21619

如果你想要更先进的东西,这个代码有社交authentication策略的例子(例如,你的用户可以使用Facebook帐户login) https://github.com/mjhea0/passport-examples

祝你好运!