我在我的網站中使用了多種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