2017-09-19 9 views
0

私はsails js上にアプリケーションを構築しており、ポリシーミドルウェアにローカル値を設定しようとしています。私はそうすることができません、助けてください。ミドルウェアポリシーでreq.userを更新できませんでしたか?

これは私が場所の下のコードは

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

私はハンドルバーテンプレートにアクセス{{user.perms}}にしようとしています

に取り組んでいるされている

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; 

作業ではありません最初のコードで概念的に間違ったことをしていると思います。助けてください。

+0

あなたは私に右に見える示してコードを動作します。残りのチェーンを見せてもらえますか?その他のポリシーは干渉しますか?コントローラメソッドで何か重いことをやっていますか?テンプレートはサーバー側かクライアント側ですか。 – arbuthnott

+0

req.userが他のポリシー/ミドルウェアの後のどこかで更新されているということです。私はそれを一度チェックします。私はコントローラーで何も変更していない、そのままのreq.userは呼び出されたイベントではありません。ハンドルバーを使用したサーバサイドレンダリング。 – Masade

+0

ここで1つの質問は、 'req.user'が割り当てられたmongodbドキュメントであることに気付きました。 'req.user.perms'のような返されたmongoドキュメントの値を設定することができます。元のドキュメントにはperms属性がありません。 – Masade

答えて

1

問題が見つかりました。

userUser.find()を実行した後、パスポートのデシリアライズに設定されていたので、req.userはMongoDBのドキュメントとして設定されていたとUserモデルはパーマ属性を持っていなかったので、私は値を設定することができませんでした。

答えは、コールバックに送信する前に、MongoDBドキュメントをプレーンなJSONオブジェクトに変換することでした。

passport.deserializeUser(function (userSession, done) { 

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

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

} 

さて、これは

req.user.perms = perms; 
res.locals.user = req.user; 
関連する問題