मैं नोड.जेएस, एक्सप्रेस और पासपोर्ट.जेएस का उपयोग करके एक लॉगिन तंत्र स्थापित करने की कोशिश कर रहा हूं। लॉगिन स्वयं काफी अच्छा काम करता है, सत्र भी रेडिस के साथ अच्छी तरह से संग्रहीत किए जाते हैं, लेकिन मुझे उपयोगकर्ता को पुन: निर्देशित करने से कुछ परेशानी होती है, जहां उसे प्रमाणित करने के लिए प्रेरित करने से पहले शुरू किया गया था।
उदाहरण के लिए उपयोगकर्ता इस प्रकार लिंक http://localhost:3000/hidden
को फिर से रीडायरेक्ट किया जाता है, http://localhost:3000/login
लेकिन फिर मैं चाहता हूं कि उसे फिर से रीडायरेक्ट किया जाए http://localhost:3000/hidden
।
इसका उद्देश्य यह है कि यदि उपयोगकर्ता किसी ऐसे पेज को बेतरतीब ढंग से एक्सेस करता है जिसे उसे पहले लॉग इन करना पड़ता है, तो उसे / क्रेडेंशियल प्रदान करने वाली लॉगिन साइट पर रीडायरेक्ट किया जाएगा और फिर उस साइट पर वापस रीडायरेक्ट किया जा सकता है जिसे उसने पहले एक्सेस करने की कोशिश की थी।
यहाँ मेरा लॉगिन पोस्ट है
app.post('/login', function (req, res, next) {
passport.authenticate('local', function (err, user, info) {
if (err) {
return next(err)
} else if (!user) {
console.log('message: ' + info.message);
return res.redirect('/login')
} else {
req.logIn(user, function (err) {
if (err) {
return next(err);
}
return next(); // <-? Is this line right?
});
}
})(req, res, next);
});
और यहाँ मेरा सुनिश्चित तरीका है
function ensureAuthenticated (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
जो /hidden
पृष्ठ में हुक करता है
app.get('/hidden', ensureAuthenticated, function(req, res){
res.render('hidden', { title: 'hidden page' });
});
लॉगिन साइट के लिए HTML आउटपुट काफी सरल है
<form method="post" action="/login">
<div id="username">
<label>Username:</label>
<input type="text" value="bob" name="username">
</div>
<div id="password">
<label>Password:</label>
<input type="password" value="secret" name="password">
</div>
<div id="info"></div>
<div id="submit">
<input type="submit" value="submit">
</div>
</form>