私は自分のサイトでいくつかのパスポート認証戦略を使用していますが、これはうまく機能しますが、セッションIDによってユーザーを自動的に承認するDemo
または(呼び出すことができるsession
)戦略が必要です。ユーザーがナビゲートするときに手動で実行していますページに対して/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
});
});
}
});
});
ユーザースキーマは次のようになります。
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;
}
既存のパスポート戦略の1つを使用して、これを行うためのよりエレガントな方法があると確信しています。パスポート-http、パスポート-匿名、その他いくつかあることがわかりますが、どちらを使用すればよいかわかりません。
ユーザーのデータベースエントリを作成することは私にとって重要です。後で別のアカウントを添付することができます。