7

ユーザーがログインしているときに、基本的な管理者認証を設定しています。この関数を authcallback で呼び出します。

function checkAdmin (req) {
  Admin.findOne( { user : req.user.id },function ( err, admin, count ){
    req.session.isAdmin = true;
    console.log("session : %j",req.session);
  })
}

そして、私はします

res.redirect('/')

インデックス コントローラ内のコード:

console.log("session : %j",req.session);
  res.render('index', { title: 'Accueil',message: req.flash('info') });

そして、これは私がコンソールに表示するものです:

session : {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path"
:"/"},"passport":{"user":"5079832df1e9a6485e000001"},"flash":{},"isAdmin":true}

session : {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path"
:"/"},"passport":{"user":"5079832df1e9a6485e000001"},"flash":{}}

セッションが isAdmin 値を保存しない理由がわかりません。

app.use(app.router) の場所が原因である可能性があるという他の質問をいくつか読みましたが、私はそうします:

app.use(cookieParser)
app.use(express.session({store: session_store }));
app.use(passport.initialize())
app.use(passport.session())


// routes should be at the last
app.use(app.router)

それは私が推測する一種のばかでなければなりません..

4

1 に答える 1

7

上手、

最後に、これが機能しない理由を見つけました。Admin.findOne関数の外部でres.redirectを実行しました。そのため、セッション変数が設定される前にクライアントがリダイレクトされました。

このauthCallbackFunctionは機能しています:

exports.authCallback = function (req, res, next) {
  //Check if the logged in user is an admin
  Admin.findOne( { user : req.user.id },function ( err, admin, count ){
    var old = req.session;
      if(!err && admin)
        req.session.isAdmin = true;
      res.redirect('/')
  })
}

また、ユーザーがログアウトするときは、セッションを再生成することを忘れないでください

// logout
exports.logout = function (req, res) {
  req.session.regenerate(function(){
    req.logout()
    res.redirect('/login')  
  })

}
于 2012-12-01T16:52:07.010 に答える