5

NodeJS、ExpressJS、PassportJS、Jade を使用しています。

ログインまたはログアウトを表示するヘッダー メニューがあります。ユーザーがまだログインしていない場合はログインが表示され、ユーザーがすでにログインしている場合はログアウトが表示されます。

メニューは別の jade ファイルmenu.jadeにあり、残りの jade ファイルに含まれています。

include menu

menu.jade で、ユーザーがすでにログインしているかどうかを確認するにはどうすればよいですか? jadeでセッション変数を確認できますか? 以下のようなものmenu.jadeですか?

if ( req.session.name != null)
    a(href='/logout') Logout
else
    a(href='/login') Login  

ありがとう

4

2 に答える 2

8

セッションをテンプレートに公開する必要があります。私が行う方法は、ユーザー変数をローカルに配置することです。

注: req.user は、passportJS によって設定されます。その例は、ここ (一番下)から見ることができます
注 #2: ローカルの詳細については、こちら

app.get('*', function(req, res, next) {
  // put user into res.locals for easy access from templates
  res.locals.user = req.user || null;

  next();
});

そして、テンプレートでこれを行うことができます:

- if(_user) {
    div.menuForLoggedInUser
- } else {
    div.menuForLoggedOutUser
- }

ユーザーオブジェクト全体をテンプレートに公開したくない場合は、ローカルに「loggedIn」を追加して確認してください...次のようなもの:

app.get('*', function(req, res, next) {
  // just use boolean for loggedIn
  res.locals.loggedIn = (req.user) ? true : false;

  next();
});

編集: res.locals とapp.localsを指摘してくれた robertklep に感謝

于 2013-06-20T02:41:44.517 に答える
1

チェックログインの結果となる変数を持ってきます。

// routes/some.js
exports.index = function (req, res) {
    res.render('somepage', {
        isAlreadyLoggedin: checkSessionSomeway()
    })
}

// menu.jade
if ( isAlreadyLoggedin != null)
    a(href='/logout') Logout
else
    a(href='/login') Login
于 2013-06-20T03:03:38.010 に答える