ฉันกำลังพยายามสร้างกลไกการเข้าสู่ระบบโดยใช้ node.js, express และ passport.js การเข้าสู่ระบบใช้งานได้ค่อนข้างดีนอกจากนี้เซสชันจะถูกจัดเก็บไว้อย่างดีด้วยการ redis แต่ฉันมีปัญหาในการเปลี่ยนเส้นทางผู้ใช้ไปยังจุดที่เขาเริ่มต้นก่อนที่จะได้รับแจ้งให้ตรวจสอบสิทธิ์
เช่นผู้ใช้ดังต่อไปนี้การเชื่อมโยง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);
});
และนี่คือวิธีการ sureAuthenticated ของฉัน
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>