Saya mencoba membuat mekanisme login menggunakan node.js, express, dan passport.js. Login itu sendiri berfungsi cukup bagus, juga sesi disimpan dengan baik dengan redis tetapi saya memiliki beberapa masalah dengan mengarahkan pengguna ke tempat dia memulai sebelum diminta untuk mengotentikasi.
mis. Tautan mengikuti pengguna http://localhost:3000/hidden
kemudian dialihkan ke http://localhost:3000/login
tetapi kemudian saya ingin dia dialihkan lagi ke http://localhost:3000/hidden
.
Tujuannya adalah, jika pengguna mengakses secara acak halaman yang dia butuhkan untuk masuk terlebih dahulu, dia akan dialihkan ke situs / login dengan memberikan kredensial dan kemudian dialihkan kembali ke situs yang sebelumnya dia coba akses.
Ini posting login saya
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);
});
dan di sini Metode sureAuthenticated saya
function ensureAuthenticated (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
yang terhubung ke /hidden
halaman
app.get('/hidden', ensureAuthenticated, function(req, res){
res.render('hidden', { title: 'hidden page' });
});
Output html untuk situs login cukup sederhana
<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>