Passport.js策略,不需要字段

我很惊讶,很难find,或者可能是我的错。

我需要一个不需要字段的passport.js strategy – 通过简单的用户GET请求来运行身份validation,然后操作用户会话数据,例如创build一个新的“访客”用户。

也许我可以通过护照local-strategy做到这一点? 或者我需要创build一个自定义的?

我看到这个configuration护照接受请求没有身体? 问题,但我只是无法弄清楚如何在答案包装build议会改变任何东西。

编辑:这是我想要实现的

  passport.use('guest', new LocalStrategy({ passReqToCallback: true }, function (req, NOusername, NOpassword, done) { ////NO PASSWORD OR USERNAME checks here, just deciding what kind of temporary user needs to be created/// if (req.session.passport) { ///create new user with previous session data done(null,user) } else { ///create clean user done(null, user) }) ) 

然后在routes.js

 app.get('/', passport.authenticate('guest'), function (req, res) { res.render('PeerRoom.ejs', req.user); }); 

编辑:另一种方法可能是使用req.logIn并跳过处理完全的策略

 app.get('/', yourCustomGuestAuthenticationMiddleware, function (req, res) { res.render('PeerRoom.ejs', req.user); }); function yourCustomGuestAuthenticationMiddleware(req, res, next){ // No need to do anything if a user already exists. if(req.user) return next(); // Create a new user and login with that var user = new User({name: 'guest'+Math.random().toString() }); user.save(); req.logIn(user, next); } 

要创build新的访客用户,只需执行此操作,而不是拒绝身份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) { /* HERE, INSTEAD OF REJECTING THE AUTHENTICATION */ // return done(null, false, { message: 'Incorrect username.' }); /* SIMPLY CREATE A NEW USER */ var user = new User({ name: 'guest'+Math.random().toString() }); user.save(); /* AND AUTHENTICATE WITH THAT */ return done(null, user); } if (!user.validPassword(password)) { return done(null, false, { message: 'Incorrect password.' }); } return done(null, user); }); } ));