私はミドルウェア機能を使って、ログインしたユーザーが要求されたページへのアクセスを許可する前にロール= 2を持っているかどうかをチェックする必要があります。ユーザーがロール= 2を持っていない場合は、ホームページ(/)にリダイレクトする必要があります。私はそれを達成するために次の関数を書いた:node.js |確実に管理するミドルウェアの機能が動作しない
isAdmin = function(req, res, callback) {
let Users = require('./models/users');
Users.findOne({ 'steam.id': req.user.steam.id }, 'role', function(err, data) {
if(err) {
return callback(err, false);
} else {
if(data.steam.role === undefined || data.steam.role != 2) {
return callback(null, false);
} else {
if(data.steam.role === 2){
return callback(null, true);
}
}
}
});
};
次の関数がapp.getに置かれます(/管理者)私のルートの一部app.get
function ensureAdmin(req, res, next) {
if (isAdmin()) {
return next();
}
console.log(colors.red('[ATTENTION] ') + colors.red('A non admin tried to access admin-only pages'));
res.redirect('/');
}
ファイル:
にapp.get('/admin', ensureAuthenticated, ensureAdmin, function(req, res){
res.send('Admin panel!');
});
私は/ adminページにアクセスしようとすると、ReferenceError:isAdminが定義されていません。おそらく、私が解決できないこのエラーの後にはさらに多くのエラーがあるので、もし誰かが私が何をやったのか教えてくれればいいだろう。
module.exports = function(isAdmin){
var isAdmin = function(req, res, callback) {
if(req.user.steam.role === undefined || req.user.steam.role != 2){
return callback(null, false);
} else {
if(req.user.steam.role === 2){
return callback(null, true);
}
}
};
}
:私は
EDIT(新コード):) Node.jsの初心者です。あなたが別のファイルであり、それはまた
var isAdmin = function(req, res, callback) { let Users = require('./models/users'); return Users.findOne({ 'steam.id': req.user.steam.id }, 'role', function(err, data) { if(err) { return callback(err, false); } else { if(data.steam.role === undefined || data.steam.role != 2) { return callback(null, false); } else { if(data.steam.role === 2){ return callback(null, true); } } } }); }; export default isAdmin
非同期
だとして、その機能を返却する場合let isAdmin = require('../functions/isAdmin');
function ensureAdmin(req, res, next) {
if(isAdmin()) {
return next();
}
}
isAdminはあなただけで呼び出すことができません非同期である '場合(isAdmin()){}'すでにユーザーがリクエストオブジェクトにロードされている場合は、なぜあなたは、データベース内の自分の役割を確認する必要があります –
?あなたはreq.user.steam.roleをチェックできませんか? – Paul
ありがとうポール、私はあなたのアドバイスを実装しました:) – DerJP