2017-09-19 3 views
0

Je construis une application sur voiles js et j'essaie de définir une valeur locale dans un middleware de stratégie. Je suis incapable de le faire, s'il vous plaît aider.Impossible de mettre à jour req.user dans une stratégie de middleware?

Ce ne fonctionne pas

var perms = {"view":true,"add":true,"edit":false}; 
    // My req.user comes after deserialize (working well) 
    req.user.perms = perms; 
    res.locals.user = req.user; 

où sont le code ci-dessous fonctionne

var perms = {"view":true,"add":true,"edit":false}; 
    res.locals.user = req.user; 
    res.locals.user.perms = perms; 

Je suis en train d'accéder {{user.perms}} dans un modèle de guidon

I suppose que je fais quelque chose de mal conceptuellement dans le premier code, s'il vous plaît aider.

+0

Le code que vous montrer regarde droit à moi. Pouvez-vous montrer le reste de la chaîne? Toute autre politique interférant? Fais-tu quelque chose de lourd dans la méthode du contrôleur? Votre modèle est-il côté serveur ou côté client? – arbuthnott

+0

Vous voulez dire, req.user est mis à jour quelque part plus tard dans d'autres politiques/middleware. Je vais vérifier une fois. Je ne change rien au contrôleur, intq.user intacte n'est pas appelé. Son rendu côté serveur à l'aide de guidons. – Masade

+0

Une question ici, je me rends compte que 'req.user' est un document mongodb qui a été assigné, est-ce qu'il cause un problème? puis-je définir une valeur du document mongo retourné comme document original «req.user.perms» n'a pas l'attribut perms – Masade

Répondre

1

j'ai pu trouver la question.

Le user était en cours situé dans deserialize de passeport après l'exécution User.find(), de sorte que le req.user était en cours défini comme un document MongoDB et parce que le modèle User n'a pas perms attribut, je n'étais pas en mesure de définir la valeur.

La réponse a été de convertir MongoDB Document à l'objet JSON simple avant de l'envoyer à rappel.

passport.deserializeUser(function (userSession, done) { 

    User.findOne({"_id":userSession._id},function(err, user){ 

     done(err, user.toObject()) 
    }) 

} 

Maintenant, cela fonctionne

req.user.perms = perms; 
res.locals.user = req.user;