我在我的网站中使用了多种Passport认证策略,但效果很好,但是,我需要一个Demo
或(我们可以拨打session
)策略,通过它的会话ID自动授权用户,现在我当用户导航到/demo
页面时,我使用会话ID在db(mongodb)上运行查询,并且如果用户存在,我使用该用户呈现页面,如果没有,我创建一个。使用哪种护照认证
app.get('/demo', function(req,res) {
db.User.findOne({ 'accounts.kind': 'demo', 'accounts.sid': req.sessionID }, function(err, user) {
if (user) {
res.render('home', {
user: user
});
} else {
var user = new db.User();
user.accounts.push({
kind: 'demo',
sid: req.sessionID,
created: Date.now
});
req.session.userId = user._id;
user.save(function(err) {
if(err) { throw err; }
res.render('home', {
user: user
});
});
}
});
});
用户的模式是这样的:
它的工作原理,但我需要设置一个会话变量,因为这种方法不登录的用户,我的意思是在没有req.user
请求,但与该会话变量,我可以检查用户是否是演示用户。
if (req.user) {
userid = req.user._id.toString();
} else {
userid = req.session.userId;
}
我敢肯定有这样做,与现有护照策略的一个更优雅的方式。我看到有passport-http和passport-anonymous以及其他几个,但我不确定应该使用哪个。
对我来说,为用户创建数据库条目很重要。所以后来我可以附加一个另一个帐户。
不适用于Cookie吗? – Patrick
@Patrick是的,它涉及cookies,会话ID在cookie中, – balazs
然后你不需要一个策略。序列化和反序列化应该自动工作,并在用户回来时检索会话。 – Patrick