在Passport-Mongoose-Local中使用Mongoose-Role

我试图添加一个用户在Passport-Mongoose-Local .register方法上的一个angular色,当我单击表单来触发该路由上的post时,它只是无限挂起,直到它丢弃连接。 我不知道为什么,但可能是因为在同一架构中使用2个不同的插件?

server.js:

`//package main dependencies const express = require('express'); const app = express(); const bodyParser = require('body-parser'); const passport = require('passport'), LocalStrategy = require('passport-local').Strategy; const flash = require('connect-flash'); const expressValidator = require('express-validator'); const mongoose = require('mongoose'); //dev dependencies let logger = require('morgan'); //setting view engine for ejs app.set('view engine', 'ejs' ); //middleware app.use(require('express-session')({ secret: 'avidaeumatorredehanoi', resave: false, saveUninitialized: false })); let middleware = require('./middleware'); app.use(bodyParser.urlencoded({extended: true})); app.use(express.static(__dirname + '/public')); app.use(flash()); app.use(logger('dev')); //error handling global variables app.use(function(req,res,next){ res.locals.currentuser = req.user || null; res.locals.error_msg = req.flash("error-message"); res.locals.error = req.flash("error"); res.locals.success = req.flash("success"); next(); }); app.use(expressValidator({ errorFormatter: function(param, msg, value){ let namespace = param.split('.'), root = namespace.shift(), formParam = root; while(namespace.length){ formParam += '[' + namespace.shift() + ']'; } return{ param: formParam, msg: msg, value: value }; } })); //models let User = require('./models/User'); //fire passport app.use(passport.initialize()); app.use(passport.session()); //passport config passport.use(new LocalStrategy(User.authenticate())); passport.serializeUser(User.serializeUser()); passport.deserializeUser(User.deserializeUser()); //database let db = require('./config/db'); mongoose.Promise = global.Promise; //controllers with routing imports let Routes = require('./controllers'); app.use('/', Routes); //page not found handler app.use(function(req, res, next){ res.status(404); // respond with html page if (req.accepts('html')) { res.render('pages/404', { url: req.url }); return; } // respond with json if (req.accepts('json')) { res.send({ error: 'Página não encontrada!' }); return; } // default to plain-text. send() res.type('txt').send('Página não encontrada!'); }); //server port let port = process.env.PORT || 3000; app.listen(port, function(err){ if(err)throw err; console.log("\n\n************\n Server started at port: " + port + '\n\n************') }); 

模型:

  const mongoose = require('mongoose'); const bcrypt = require('bcrypt'); const passportLocalMongoose = require('passport-local-mongoose'); let Schema = mongoose.Schema; let UserSchema = new Schema({ email:{ type: String, unique: true }, full_name:{ type: String }, bday:{ type: Date }, contact:{ type: Number } }); UserSchema.plugin(passportLocalMongoose); UserSchema.plugin(require('mongoose-role'), { roles: ['paciente','psiquiatra', 'admin'], accessLevels: { 'paciente': ['paciente', 'psiquiatra', 'admin'], 'psiquiatra': ['psiquiatra', 'admin'], 'admin': ['admin'] } }); UserSchema.plugin(passportLocalMongoose); let User = mongoose.model('User', UserSchema); module.exports = User; 

addUser(与User.register()):

 let express = require('express'); let router = express.Router(); let passport = require('passport'); let User = require('../../models/User'); router.get('/add', function(req,res){ res.render('pages/admin/add-user', {}); }); router.post('/add', function(req, res, next){ let newUser = new User({username: req.body.username, role: req.body.role}) User.register(newUser, req.body.password, function(error){ if(error){ console.log('Error while registering user') res.render('pages/admin/add-user', {error: error.message}); } console.log('User registered successfully: ' + user); res.render('pages/admin', {success: 'Utilizador adicionado com sucesso'}); }); }); module.exports = router; 

我需要在authentication后包含基于angular色的路由,所以最简单的path似乎使用这个包,因为受保护的路由兼容性。