4

我很惊讶它很难找到,或者我可能有什么问题。

我需要一个passport.js strategy不需要字段的 - 在简单的用户GET请求上运行身份验证'/'并操作用户会话数据,例如,创建一个新的“访客”用户。

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

我看到这个配置护照接受没有正文的请求? 问题,但我只是无法弄清楚答案包装中的建议将如何改变任何东西。

编辑:这就是我想要实现的目标

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

1 回答 1

4

编辑:另一种方法可能是使用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);
}

要创建新的访客用户,只需执行此操作而不是拒绝身份验证

这是来自文档的修改示例

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);
        });
    }
));
于 2015-03-19T20:35:59.207 回答