मैं पिछला url प्राप्त करना चाहता हूं, उदाहरण के लिए सभी मेरे /admin
मार्गों में मैं एक फॉर्म खोलता हूं जहां व्यवस्थापक को अपने द्वारा अनुरोधित मार्ग पर पुनर्निर्देशित करने के लिए अपना पासवर्ड फिर से दर्ज करने की आवश्यकता होती है, लेकिन समस्या यह है कि मैं उसके पासवर्ड को मान्य करने के बाद और मैं उसे उस मार्ग पर पुनर्निर्देशित करने का प्रयास करता हूं जो उसने शुरू में अनुरोध किया था, मेरे पास अब यह मार्ग नहीं है, यह खो गया है। उदाहरण के लिए, व्यवस्थापक अनुरोध करता है /व्यवस्थापक/पंजीकरण, एक प्रपत्र प्रकट होता है जो validate-password
पर पोस्ट करता है, और फिर यदि यह पाता है कि पासवर्ड मेल खाता है (सही पासवर्ड दर्ज किया गया है), तो उसे उपयोगकर्ता को उस मार्ग पर पुनर्निर्देशित करना चाहिए जो उसने एक बार अनुरोध किया था, लेकिन मुझे नहीं पता कि उसने जिस प्रारंभिक मार्ग का अनुरोध किया था उसे कैसे प्राप्त करें
router.all('/admin/*', isAdmin, (req, res, next) => {
res.render('validatePassword', {message: 'Please re-enter your password to get access to ' + req.originalUrl});
// next();
});
router.get('/admin/register', (req, res) => {
res.render('register', {message: req.flash('message'), role_id: req.user.role_id})
});
// Validate password, admin re-enter password to get access to /admin routes
router.post('/validate-password', async (req, res, next) => {
const password = req.body.password;
const match = await passwordController.comparePassword(password, req.user.password);
console.log(password);
if (match) {
// return res.redirect('/' +); HOW DO I REDIRECT HERE
return next();
} else {
// return res.render('changePassword', {role_id: req.user.role_id});
return res.render('validatePassword', {message: 'Wrong password'});
}
});
2 जवाब
यहां:
router.all('/admin/*', isAdmin, (req, res, next) => {
res.render('validatePassword', {message: 'Please re-enter your password to get access to ' + req.originalUrl});
// next();
});
जब आप इस पृष्ठ को प्रस्तुत करने के लिए जाते हैं, तो क्या आप मूल मार्ग को स्थानीय के रूप में संलग्न कर सकते हैं जैसा कि आप message
के साथ करते हैं? आपको req.originalUrl
जोड़ने और validatePassword
को पास करने में सक्षम होना चाहिए। फिर जब वह पृष्ठ पासवर्ड को मान्य करने के लिए POST को कॉल करता है, तो आप उस तक रीडायरेक्ट URL को शरीर के हिस्से के रूप में पास करते हैं।
यह वह है जिसके लिए आप कुकीज़ का उपयोग करते हैं या सर्वर-साइड सत्रों के लिए (जो कुकी का भी उपयोग करते हैं)। आप एक बार उपयोगकर्ता को प्रमाणित करते हैं, एक कुकी सेट करते हैं और फिर उस ब्राउज़र से भविष्य के अनुरोधों पर, प्रत्येक अनुरोध के साथ कुकी भेजी जाएगी और फिर आप उस कुकी को यह देखने के लिए जांच सकते हैं कि वे प्रमाणित हैं या नहीं और यह तय करें कि वे क्या हैं या क्या हैं। के आधार पर करने के लिए अधिकृत है। वेब पर लॉगिन का उपयोग करने वाली लगभग हर साइट इसी तरह काम करती है।
मैं express-session
मॉड्यूल का उपयोग करने का सुझाव दूंगा जो सर्वर-साइड सत्र बनाता है आपके लिए (और आपके लिए कुकी को स्वचालित रूप से प्रबंधित करता है) और फिर जब उपयोगकर्ता प्रमाणित हो जाता है, तो आप सत्र में एक ऑथ फ्लैग सेट कर सकते हैं कि आपके सभी मार्ग जिन्हें ऑथ की आवश्यकता होती है, वे जांच सकते हैं।
आपको एक्सप्रेस-सत्र का उपयोग करने की आवश्यकता नहीं है। आप कुकी को स्वयं प्रबंधित कर सकते हैं, लेकिन फिर आपको यह सुनिश्चित करना होगा कि कुकी ठीक से एन्क्रिप्ट की गई है (जेडब्ल्यूटी उसके लिए एक लोकप्रिय पुस्तकालय है) ताकि इसे एक दुष्ट ग्राहक द्वारा आसानी से जाली बनाया जा सके। और, आप जिस भी राज्य को उपयोगकर्ता के लिए रखना चाहते हैं, उसे या तो कुकी में ही रखना होगा (कुकीज़ को वास्तविक बड़ा नहीं रखा जाना चाहिए क्योंकि वे प्रत्येक http अनुरोध पर आगे और आगे भेजे जाते हैं और ब्राउज़र में संग्रहीत होते हैं) या आपके पास होगा कुकी में एक एन्क्रिप्टेड आईडी डालने के लिए जिसे आप अपने सर्वर-साइड सत्र ऑब्जेक्ट की कुंजी के रूप में उपयोग कर सकते हैं।
ओपी द्वारा स्पष्ट किए जाने के बाद संपादन जोड़े गए वे पहले से ही एक्सप्रेस-सत्र का उपयोग कर रहे हैं।
लॉगिन करने के लिए पुनर्निर्देशित होने पर यह सामान्य है कि आप एक क्वेरी स्ट्रिंग या छिपे हुए फॉर्म तत्व भेजते हैं जो कि वह मूल URL है जिस पर उपयोगकर्ता जाना चाहता था। फिर, लॉगिन फॉर्म उस क्वेरी स्ट्रिंग या छिपे हुए फॉर्म तत्व को उसके लॉगिन फॉर्म डेटा के साथ सर्वर पर भेज देगा। सफलतापूर्वक लॉग इन करने के बाद, सर्वर आपको उस मूल लक्ष्य URL पर पुनर्निर्देशित करता है, जिस पर उपयोगकर्ता जाना चाहता था। इसलिए, उपयोगकर्ता /admin/add
पर जाते हैं, /login
पर पुनर्निर्देशित हो जाते हैं, लेकिन उस लॉगिन फॉर्म में एक छिपा हुआ फॉर्म तत्व /admin/add
होता है। उपयोगकर्ता पासवर्ड फॉर्म जमा करता है।
सर्वर pwd को मान्य करता है, फिर लॉगिन फॉर्म से मूल /admin/add
url प्राप्त करता है और उपयोगकर्ता को उस URL पर रीडायरेक्ट करता है। इसके लिए आपकी प्रामाणिक जांच यह देखती है कि उपयोगकर्ता ने अभी लॉग इन किया है इसलिए उन्हें आगे बढ़ने की अनुमति है।
/admin/add
पर जाते हैं, /login
पर पुनर्निर्देशित हो जाते हैं, लेकिन उस लॉगिन फॉर्म में एक छिपा हुआ फॉर्म तत्व /admin/add
होता है। उपयोगकर्ता पासवर्ड फॉर्म जमा करता है।