मैं पिछला 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'});
    }
});
1
Johnny Bra 4 अप्रैल 2020, 04:56
इसका मूल रूप से इसी प्रश्न का उत्तर उनके अनुवर्ती प्रश्न पर यहां पर किया गया है। जो वास्तव में एक अलग सवाल नहीं है।
 – 
jfriend00
4 अप्रैल 2020, 09:41

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 को शरीर के हिस्से के रूप में पास करते हैं।

-1
Joe 4 अप्रैल 2020, 05:26

यह वह है जिसके लिए आप कुकीज़ का उपयोग करते हैं या सर्वर-साइड सत्रों के लिए (जो कुकी का भी उपयोग करते हैं)। आप एक बार उपयोगकर्ता को प्रमाणित करते हैं, एक कुकी सेट करते हैं और फिर उस ब्राउज़र से भविष्य के अनुरोधों पर, प्रत्येक अनुरोध के साथ कुकी भेजी जाएगी और फिर आप उस कुकी को यह देखने के लिए जांच सकते हैं कि वे प्रमाणित हैं या नहीं और यह तय करें कि वे क्या हैं या क्या हैं। के आधार पर करने के लिए अधिकृत है। वेब पर लॉगिन का उपयोग करने वाली लगभग हर साइट इसी तरह काम करती है।

मैं express-session मॉड्यूल का उपयोग करने का सुझाव दूंगा जो सर्वर-साइड सत्र बनाता है आपके लिए (और आपके लिए कुकी को स्वचालित रूप से प्रबंधित करता है) और फिर जब उपयोगकर्ता प्रमाणित हो जाता है, तो आप सत्र में एक ऑथ फ्लैग सेट कर सकते हैं कि आपके सभी मार्ग जिन्हें ऑथ की आवश्यकता होती है, वे जांच सकते हैं।

आपको एक्सप्रेस-सत्र का उपयोग करने की आवश्यकता नहीं है। आप कुकी को स्वयं प्रबंधित कर सकते हैं, लेकिन फिर आपको यह सुनिश्चित करना होगा कि कुकी ठीक से एन्क्रिप्ट की गई है (जेडब्ल्यूटी उसके लिए एक लोकप्रिय पुस्तकालय है) ताकि इसे एक दुष्ट ग्राहक द्वारा आसानी से जाली बनाया जा सके। और, आप जिस भी राज्य को उपयोगकर्ता के लिए रखना चाहते हैं, उसे या तो कुकी में ही रखना होगा (कुकीज़ को वास्तविक बड़ा नहीं रखा जाना चाहिए क्योंकि वे प्रत्येक http अनुरोध पर आगे और आगे भेजे जाते हैं और ब्राउज़र में संग्रहीत होते हैं) या आपके पास होगा कुकी में एक एन्क्रिप्टेड आईडी डालने के लिए जिसे आप अपने सर्वर-साइड सत्र ऑब्जेक्ट की कुंजी के रूप में उपयोग कर सकते हैं।


ओपी द्वारा स्पष्ट किए जाने के बाद संपादन जोड़े गए वे पहले से ही एक्सप्रेस-सत्र का उपयोग कर रहे हैं।

लॉगिन करने के लिए पुनर्निर्देशित होने पर यह सामान्य है कि आप एक क्वेरी स्ट्रिंग या छिपे हुए फॉर्म तत्व भेजते हैं जो कि वह मूल URL है जिस पर उपयोगकर्ता जाना चाहता था। फिर, लॉगिन फॉर्म उस क्वेरी स्ट्रिंग या छिपे हुए फॉर्म तत्व को उसके लॉगिन फॉर्म डेटा के साथ सर्वर पर भेज देगा। सफलतापूर्वक लॉग इन करने के बाद, सर्वर आपको उस मूल लक्ष्य URL पर पुनर्निर्देशित करता है, जिस पर उपयोगकर्ता जाना चाहता था। इसलिए, उपयोगकर्ता /admin/add पर जाते हैं, /login पर पुनर्निर्देशित हो जाते हैं, लेकिन उस लॉगिन फॉर्म में एक छिपा हुआ फॉर्म तत्व /admin/add होता है। उपयोगकर्ता पासवर्ड फॉर्म जमा करता है।

सर्वर pwd को मान्य करता है, फिर लॉगिन फॉर्म से मूल /admin/add url प्राप्त करता है और उपयोगकर्ता को उस URL पर रीडायरेक्ट करता है। इसके लिए आपकी प्रामाणिक जांच यह देखती है कि उपयोगकर्ता ने अभी लॉग इन किया है इसलिए उन्हें आगे बढ़ने की अनुमति है।

-1
jfriend00 4 अप्रैल 2020, 06:35
1
मैं पहले से ही एक्सप्रेस-सत्र का उपयोग कर रहा हूं और एक सत्र आईडी कुकी संग्रहीत कर रहा हूं, मैं चाहता हूं कि पहले से लॉग इन व्यवस्थापक कुछ मार्गों में अधिक सुरक्षा के लिए अपना पासवर्ड दोबारा दर्ज करे
 – 
Johnny Bra
4 अप्रैल 2020, 05:10
- ठीक है, तो सत्र में आपको जो भी स्थिति चाहिए, उसे पिछले मार्ग पर रखें और अगले मार्ग में वहां जांचें। सत्र वस्तु यह है कि आप प्रत्येक उपयोगकर्ता के लिए चीजों का ट्रैक कैसे रखते हैं। यदि आप केवल अंतिम मार्ग जानना चाहते हैं, तो बस उसे सत्र में रखें और वहां इसकी जांच करें। यदि आप उस जानकारी को अपने प्रश्न में शामिल करते तो मैं अधिक लक्षित उत्तर लिख सकता था।
 – 
jfriend00
4 अप्रैल 2020, 05:11
मुझे जो समस्या हो रही है वह यह है: मेरे पास 2 मार्ग/व्यवस्थापक/जोड़ें और/व्यवस्थापक/पंजीकरण हैं, दोनों मार्गों के लिए पासवर्ड को फिर से दर्ज करने की आवश्यकता है, लेकिन अब जब मैं उपयोगकर्ता को मान्य पासवर्ड फॉर्म में भेजता हूं जब वह किसी का अनुरोध करता है इन 2 व्यवस्थापक मार्गों में से, और वह सही ढंग से पासवर्ड दर्ज करता है, मेरे पास यह जानने का कोई तरीका नहीं है कि उसने शुरू में किस मार्ग से अनुरोध किया था, क्या वह अनुरोध करता है /व्यवस्थापक/जोड़ें या /व्यवस्थापक/पंजीकरण करें?
 – 
Johnny Bra
4 अप्रैल 2020, 05:13
गलतफहमी के लिए खेद है
 – 
Johnny Bra
4 अप्रैल 2020, 05:14
- ठीक है, जब लॉगिन पर रीडायरेक्ट किया जाता है तो यह सामान्य है कि आप एक क्वेरी स्ट्रिंग या छिपे हुए फॉर्म तत्व भेजते हैं जो कि मूल यूआरएल है जिसे उपयोगकर्ता जाना चाहता था। फिर, लॉगिन फॉर्म उस क्वेरी स्ट्रिंग या छिपे हुए फॉर्म तत्व को उसके लॉगिन फॉर्म डेटा के साथ सर्वर पर भेज देगा। सफलतापूर्वक लॉग इन करने के बाद, सर्वर आपको उस मूल लक्ष्य URL पर पुनर्निर्देशित करता है, जिस पर उपयोगकर्ता जाना चाहता था। इसलिए, उपयोगकर्ता /admin/add पर जाते हैं, /login पर पुनर्निर्देशित हो जाते हैं, लेकिन उस लॉगिन फॉर्म में एक छिपा हुआ फॉर्म तत्व /admin/add होता है। उपयोगकर्ता पासवर्ड फॉर्म जमा करता है।
 – 
jfriend00
4 अप्रैल 2020, 05:16