2014-07-10 9 views
5

मैं अपने express.js अनुप्रयोग में एक सरल मिडलवेयर समारोह का उपयोग कर रहा एक उपयोगकर्ता व्यवस्थापक विशेषाधिकार है कि क्या सत्यापित करने के लिए:यह सत्यापित कर रहा है कि कोई उपयोगकर्ता req.user पर आधारित व्यवस्थापक है या नहीं?

function isAdmin (req, res, next) { 
    if (req.user.admin) 
     return next(); 
    res.redirect("/"); 
} 

passport खाता प्रमाणीकरण के लिए इस्तेमाल किया जा रहा है।

क्या यह सुरक्षित है या req.user.admin उन उपयोगकर्ताओं के अनुरोध में इंजेक्शन दिया जा सकता है, जिनके पास व्यवस्थापकीय विशेषाधिकार नहीं हैं? क्या मुझे पहले उपयोगकर्ता को ढूंढना चाहिए और फिर जांचें कि क्या उपयोगकर्ता के पास व्यवस्थापकीय विशेषाधिकार हैं या नहीं? उदाहरण के लिए:

function isAdmin (req, res, next) { 
    if (req.user) { 
     User.findOne({ "_id" : req.user._id }, function (err, user) { 
      if (err) { 
       throw err; 
      } else if (user.admin) { 
       return next(); 
      } else { 
       res.redirect("/"); 
      } 
     }) 
    } else { 
     res.redirect("/"); 
    } 
} 

मेरे लिए, यह अनिवार्य रूप से जटिल लगता है। इससे अधिक डेटाबेस एक्सेस भी हो जाएंगे। क्या यह सत्यापित करना आवश्यक है कि कोई उपयोगकर्ता वास्तव में एक व्यवस्थापक है या मेरा पहला कार्य पर्याप्त है? संक्षेप में, req को कौन देख सकता है या बदल सकता है, और इस प्रकार, req.user?

+0

यह प्रश्न आपके लिए प्रासंगिक हो सकता है: http://stackoverflow.com/questions/24649274/authentication-with-passport-can-i-trust-that-req-user-is-indeed-the-logged-in – dylants

उत्तर

0

मैं पासपोर्ट के साथ बहुत परिचित नहीं हूँ, लेकिन अगर यह कैसे काम करता है express-session के समान है, req.session वस्तु एक (संभावित एन्क्रिप्टेड) ​​कुकी और इतने में संग्रहीत किया जाता है, तो आप इस से दूर एक प्रमाणीकरण प्रणाली का निर्माण, आप स्टोर कर सकते हैं req.session.user में उपयोगकर्ता की जानकारी और आश्वस्त रहें कि सुरक्षित है।

संबंधित मुद्दे

 संबंधित मुद्दे