Comment mettre à jour req.session de l'utilisateur de l'objet défini par passportjs?

Je suis en train de le faire depuis beaucoup de jours, mais tous mes tests échoue...

Utilisateurs sur ma plate-forme de se connecter à l'aide de passportjs stratégies (paypal, facebook, google...).

Lorsque l'utilisateur est connecté je écrire son pseudo sur le droit dans l'en-tête.
Le code html de l'en-tête est généré à partir d'un guidon de modèle, et lorsque cette partielle est servi par expressjs, j'envoie la req.session de l'utilisateur de l'objet pour le modèle afin de pouvoir écrire surnom et d'autres informations...

Par la voie, cela fonctionne très bien mais j'ai un problème lorsque l'utilisateur de mettre à jour son surnom de son profil, je ne peux pas mettre à jour l'objet de session sur le serveur et si l'utilisateur de recharger la page, le vieux surnom apparaît de nouveau.

Et je ne veux pas demander à l'utilisateur des informations à partir DB chaque fois qu'un utilisateur charge une page, donc je veux garder cette config :

//-- Passport session setup
passport.serializeUser(function(user, done) { done(null, user); });
passport.deserializeUser(function(obj, done) { done(null, obj); });

Mon middleware pour définir des habitants :

//-- Set accessible datas from the template
res.locals = _.extend(res.locals, {
    user: req.user,
    query: req.url,
    title: app.config.title,
    url: app.config.url
});

Mon échoue :

//Trying to update req.user directly : not persistent
req.user.nickname = User.get('nickname');

//Trying to update passport session : exception error
req.session.passport.user = User.toJSON();

//Trying to replace full session object : not persistent
var session = req.session;
session.passport.user = User.toJSON();
req.session = session;

Toute suggestion ?

Pour le moment, seule une déconnexion puis d'une connexion fonctionne... Ce n'est pas vraiment efficace 🙂

MODIFIER :

//Application router
var Router = require('./helpers/router.js');
//Create Express Server
var app = express().http().io();
//-- Init app router
var router = new Router(app);
//-- Framework Middleware
app.use(router.middleware); 
#########################
/***
* APP ROUTER
**/
//Export router
module.exports = function(app) {
//Set instance
var router = this;
//Returns routes register & middleware methods
return {
//-- Register routes
register: function() {
requirejs(['routes'], function(routes) {
_.each(routes, function(name, route) {
app.get(route, function(req, res, next) {
requirejs(['views/'+name], function(view) {
if ( view ) {
var _view = new view(_.extend(req.params, {server: {req: req, res: res, next: next}})); 
_view.render(name, req, res, next); 
}
else {
next();
}
}, function (err) {
console.log('error' + err)
});
}); 
});
});
},
//-- Bind middleware
middleware: function(req, res, next) {
//Get the current path
console.log("Middleware :: "+req.url);
//Add user informations
res.locals = _.extend(res.locals, {
user: req.user,
query: req.url,
title: app.config.title,
url: app.config.url
});
//Go next 
next(); 
}
}
}
  • La question est vraiment de là que vous attribuez res.habitants et req.de l'utilisateur.surnom. Pouvez-vous montrer peu plus de code? Quelles sont les fonctions de ces lignes qui se passe dans?
  • Le middleware est appelé juste après routes statiques, définissez les habitants de la vue et de continuer avec des itinéraires bien définis. J'ai édité le post pour montrer plus de code !
  • double possible de mise à Jour enregistré dans les détails de l'utilisateur en session
InformationsquelleAutor G33k Labs | 2013-12-11