gpt4 book ai didi

node.js - 无需字段的 Passport.js 策略

转载 作者:搜寻专家 更新时间:2023-10-31 23:12:44 24 4
gpt4 key购买 nike

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

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

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

我看到了这个Configure Passport to accept request without body?问题,但我只是无法弄清楚答案包装中的建议将如何改变任何事情。

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

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

要创建新的 guest 用户,只需这样做而不是拒绝身份验证

这是修改后的 example from the docs

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

关于node.js - 无需字段的 Passport.js 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com