在我的应用中,只有当前管理员才能创建新用户。这可以按预期工作,但是当管理员创建用户时,该管理员将登录到新创建的帐户中。 这是我的路线:
app.post('/adduser', isAdmin, passport.authenticate('local-signup', {
successRedirect : '/admin',
failureRedirect : '/adduser', an error
failureFlash : true
}));
这是我的本地注册策略:
passport.use('local-signup', new LocalStrategy({
// by default, local strategy uses username and password, we will override with email
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not)
},
function(req, username, password, done) {
if (username)
username = username.toLowerCase();
// asynchronous
process.nextTick(function() {
User.findOne({ 'local.username' : username }, function(err, user) {
// if there are any errors, return the error
if (err) {
return done(err);
}
// check to see if theres already a user with that email
if (user) {
return done(null, false, req.flash('signupMessage', 'That username is already taken.'));
}
// create the user
var newUser = new User();
newUser.local.username = username;
newUser.local.password = newUser.generateHash(password);
newUser.save(function(err) {
if (err) {
return done(err);
}
return done(null, newUser);
});
});
这是因为我在定义路线时是否使用了password.authenticate()?如何在不进行身份验证的情况下创建用户。我是否可以不使用password.js来直接与mongodb进行交互?