我在我的网站中使用了几种 Passport 身份验证策略,效果很好,但是,我需要一个Demo
or (我们可以调用session
)策略,它通过它的会话 id 自动授权用户,现在我正在手动进行,当用户导航时到/demo
页面,我在 db (mongodb) 上使用会话 ID 运行查询,如果用户存在,我会使用该用户呈现页面,如果不存在,我会创建一个。
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
});
});
}
});
});
用户架构如下所示:
UserSchema = new Schema({
uname: {type: String},
accounts: [],
docs:[{type:Schema.Types.ObjectId, ref:'Doc'}]
})
它可以工作,但是我需要设置一个会话变量,因为这个方法没有登录用户,我的意思是req.user
请求中没有,但是使用那个会话变量我可以检查用户是否是演示用户。
if (req.user) {
userid = req.user._id.toString();
} else {
userid = req.session.userId;
}
我敢肯定,使用现有的护照策略之一,有一种更优雅的方式来做到这一点。我看到有passport-http和passport-anonymous以及其他几个,但我不确定应该使用哪个。
为用户创建数据库条目对我来说很重要。所以稍后我可以附加另一个帐户。