Passport-local-mongoose:注册后validation用户权限

我正在尝试使用passport-local-mongoose在/ register表单上提交POST后对用户进行身份validation。 我不明白为什么我总是得到“未经授权”奇怪的是没有数据在数据库上提交(它工作,如果我从app.post(“/注册”)删除“passport.authenticate('本地'))

有任何想法吗 ?

app.js:

// ====== Dependencies var express = require('express'); bodyParser = require('body-parser'); validator = require('express-validator'); cookieParser = require('cookie-parser'); expressSession = require('express-session'); passport = require('passport'); LocalStrategy = require('passport-local').Strategy; auth = require('./controllers/auth'); registration = require('./controllers/register'); User = require('./models/user'); // ====== Options var app = express() .use(bodyParser.urlencoded({ extended: false })) .use(bodyParser.json()) .use(validator()) .set('view engine','ejs') .use(express.static("views")) .use(cookieParser()) .use(expressSession({ secret : 'soooosecret', resave : true, saveUninitialized : false })) .use(passport.initialize()) .use(passport.session()); passport.use(new LocalStrategy(User.authenticate())); passport.serializeUser(User.serializeUser()); passport.deserializeUser(User.deserializeUser()); app.post('/register', passport.authenticate('local'), registration.reg ); app.listen(8080); console.log('Server running at 8080'); 

register.js:

 var User = require('../models/user'); var reg = function (req, res) { /* some form validation... */ var errors = req.validationErrors(); if (errors) { res.render("register" , { errors : errors } ); } else { var newUser = new User({ username : username, password : password, email : email, tel : tel, country : country }); User.createUser(newUser); } } module.exports = { reg : reg } 

user.js:

 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/mvpem'); var passportLocalMongoose = require('passport-local-mongoose'); var db = mongoose.connection; var Schema = mongoose.Schema; var UserSchema = new Schema({ username : String, password : String, email : String, tel : Number, country : String }); UserSchema.plugin(passportLocalMongoose); module.exports = mongoose.model('User', UserSchema); module.exports.createUser = function(newUser) { newUser.save(); } 

根据https://github.com/saintedlama/passport-local-mongoose的passport-local-mongoose的API文档,您可以通过调用register(user,password,cb)来注册一个用户,

所以你的register.js应该是这样的

  ... if (errors) { res.render("register" , { errors : errors } ); } else { var newUser = new User({ username : username, email : email, tel : tel, country : country }); User.register(newUser, password, function(err, user) { if (errors) { // handle the error } passport.authenticate("local")(req, res, function() { // redirect user or do whatever you want }); }); } 

并且不要忘记在register.js中需要护照

看来你的护照configuration没有正确设置。

你必须告诉护照如何处理成功和失败,才能让你login。

从文档。 (创build一个你将在主文件中导入的config.js文件);

 var passport = require('passport') , LocalStrategy = require('passport-local').Strategy, , User = require('../models/user'); 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); }); } ));