buduję SPA korzystając wyrazić, mangusta i passportjs.Pozostawanie uwierzytelniane po odświeżeniu strony za pomocą Passportjs
Stworzyłem prosty schemat dla mojego użytkownika:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var passportLocalMongoose = require('passport-local-mongoose');
var User = new Schema({
username: String,
password: String,
first_name: String
}, { collection: 'users' });
User.plugin(passportLocalMongoose);
mongoose.model('User', User);
skonfigurowanego paszportu przy pomocy obiektu User
który mangusta dał mi:
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
i skonfigurowany moją aplikację do uwierzytelnienia użytkownika podczas nawigacji do ta trasa:
app.post('/login', passport.authenticate('local'), function(req, res, next) {
if (req.isAuthenticated()) {
return res.json({ state: 'success', user: { first_name: req.user.first_name } });
}
return res.json({ state: 'failure', message: 'cannot authenticate' });
});
Teraz jestem w stanie pomyślnie uwierzytelnić użytkownika. Przeglądarka zapisuje plik cookie z identyfikatorem sesji.
Mój problem polega na tym, że za każdym razem, gdy użytkownik odświeży stronę, paszport nie będzie deserializować użytkownika za pomocą identyfikatora sesji, co powoduje, że użytkownik jest nieuwierzytelniony.
Podczas uzyskiwania dostępu do obiektu req.user
w katalogu głównym witryny dostaję undefined
co mnie uświadomić sobie paszport nie deserializowania użytkownikowi prawidłowo:
app.use('/', function (req, res, next) {
console.log(req.user); // prints undefined.
next();
});
Jaka jest właściwa droga do przywrócenia użytkownikowi po odświeżeniu strony ?
Mongoose należy deserializacji użytkownikowi, jeśli dzwonisz 'passport.deserializeUser (User.deserializeUser());' – Plato