2016-04-26 8 views
0

ここで複数のパラメータは、私が持っているルートであります遊びます。 'user'コレクション内のユーザーを検索します。ユーザーが見つからない場合(ユーザーがログインしていない場合)、エラーが戻されます。それ以外の場合は、/ homeページが表示されます。マングースfindOne

ここでは、管理者権限を持つユーザーのみがページにアクセスできるように、私のWebサイトの管理セクションを別にしたいと考えています。

router.get('/admin', function (req, res) { 
User.findOne({_id: req.user._id, admin: true}, function (err, user) { 
    if (err) return next(err); 
    res.render('admin', {user: user}); 
}); 
}); 

私は何をするためのコードを取得しようとしていることは2つのパラメータを探すことです:私はこのような何かやってみたユーザーがログインしているかどうかを、そして彼らのそのユーザーのドキュメント内かどうか'admin'は 'true'に設定されています。明らかに上記のコードは機能しません。これをよりうまく動作させる方法はわかりません。

EDIT:私のユーザーのスキーマ:

var schema = mongoose.Schema; 
var UserSchema = new schema ({ 
username: {type: String, unique: true}, 
email: {type: String, unique: true, lowercase: true, required: true}, 
password: {type: String, minlength: passMinLength, required: true}, 
admin: {type: Boolean, default: false}, 
profile: { 
    firstName: {type: String, default: ''}, 
    lastName: {type: String, default: ''} 
} 
}); 
+0

ユーザースキーマを貼り付けることはできますか? – Nivesh

+0

お返事ありがとうございます。ユーザーのスキーマを含めるように質問を編集しました。 – MonkeyOnARock

答えて

1

がクエリ{_id: req.user._id, admin: true}で間違って何もない、とUser.Schemaも管理者(ブール値)フィールドが含まれている場合、それが動作するはずです。

さらに、別の方法では、Userオブジェクトを取得したら管理者を確認することです。

User.findOne({_id: req.user._id}, function (err, user) { 

    if (err) return next(err); 

    if(!user){ 
     //considering admin is boolean field 
     if(!user.admin){ 
     // Not Authorised to access, do something 
     } 
     else{ 
     // User verified as Admin 
     res.render('admin', {user: user}); 
     } 
    } 
    // UserId Not found, do something 
}); 
+0

私のユーザスキームにadmin(ブール値)フィールドが含まれているので、なぜそれが機能していないのかわかりません。admin:trueを持つユーザが管理ページにアクセスしようとすると、エラーが表示されます。 – MonkeyOnARock

+0

さて、あなたは正しいです。私が書いた元のクエリは機能します。私はMongoDBでadmin:trueを手作業で入力しました。「admin」:「true」と書いていました。「admin」:true ...ありがとうございますあなたの助け。 – MonkeyOnARock