14

私は、認証プロセスとエクスプレスによるセッション管理を必要とする webapp に取り組んでいます。バックエンド セッションの処理を完了しました。ここで、サインインしているユーザーを UI に表示したいと思います。privateContent は、誰かがログインしているかどうかを確認する関数です。

...
app.get( '/authRequired', queries.privateContent , routes.tasks );
...

ここに query.privateContent があります:

...
exports.privateContent = function ( req, res, next ) {
  if ( req.session.user ) {
    var username = req.session.user.username;
    User.findOne( { 'username': username }, function ( err, obj ) {
      if ( true ) {
        next();
      } else {
        res.redirect('/');
      }
    });
  } else {
    res.redirect('/');
  }
};
...

私が知りたいのは、このようなデータを送信できますか? :

...
next( username );
...

もしそうなら、routes.tasksがレンダリングするときにそれを取得するにはどうすればよいですか?

...
exports.my_tasks = function ( req, res, data ) {
      console.log(data);
      res.render('tasks/tasks',
                  { title: 'Paraíso', controller: 'MyTasksController', user: data });
};
...

ご想像のとおり、私の意図は、ルーティング モジュールにサインインしている現在のユーザーを次に渡すことです。そのため、jade を使用して UI でユーザー名を出力できます。ご協力ありがとうございました。:)

4

1 に答える 1

29

この場合、いくつかのオプションがあります (これらのうちの 1 つだけを使用してください!)。

  1. my_tasks ルートから req.session.user.username 変数にアクセスできます
  2. res.localsを使用できます
  3. reqオブジェクトにデータを追加できます

exports.privateContent 関数では、データベースでユーザーが見つかったら、そのデータを res.locals に追加するだけです。

User.findOne( { 'username': username }, function ( err, obj ) {
  if ( true ) {
    // this variable will be available directly by the view
    res.locals.user = obj;

    // this will be added to the request object
    req.user = obj;

    next();
  } else {
    res.redirect('/');
  }
});

次に、exports.my_tasks ルートres.locals.userで、ミドルウェアにあった obj になります。その後、変数としてビューで簡単にアクセスできますuser

したがって、次の方法でルート内のデータにアクセスできます。

exports.my_tasks = function ( req, res ) {
   res.render('tasks/tasks', {
     userFromReq: req.user, // this exists because you added in the middleware
     userFromSession: req.session.user, // this was already in the session, so you can access
     userFromRes: [DO NOT NEED TO DO THIS] // because res.locals are sent straight to the view (Jade).
   });
};
于 2013-11-05T16:43:36.977 に答える