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); }); } ));