Node.js, express ve passport.js kullanarak bir giriş mekanizması kurmaya çalışıyorum. Oturum açmanın kendisi oldukça iyi çalışıyor, oturumlar da redis ile güzel bir şekilde saklanıyor, ancak kullanıcıyı kimlik doğrulaması istenmeden önce başladığı yere yönlendirmede bazı sorunlar yaşıyorum.
Örn: Kullanıcı takip bağlantısı http://localhost:3000/hidden
daha sonra yeniden yönlendirilir, http://localhost:3000/login
ancak daha sonra tekrar yönlendirilmesini istiyorum http://localhost:3000/hidden
.
Bunun amacı, eğer kullanıcı ilk olarak oturum açması gereken bir sayfaya rastgele erişirse, kimlik bilgilerini sağlayarak / login sitesine yönlendirilecek ve daha sonra daha önce erişmeye çalıştığı siteye yeniden yönlendirilecektir.
İşte giriş yazım
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);
});
ve burada sureAuthenticated Method'um var
function ensureAuthenticated (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
/hidden
sayfaya bağlanan
app.get('/hidden', ensureAuthenticated, function(req, res){
res.render('hidden', { title: 'hidden page' });
});
Giriş sitesi için html çıktısı oldukça basittir
<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>