4

私は、passport@0.1.12 で express@3.0.0beta4 を使用し、認証にローカル戦略を使用しています。

すべてが正常に動作しているようで、成功と失敗を正しくリダイレ​​クトします

app.post('/login', passport.authenticate('local', { failureRedirect: '/' }),
function(req, res) {
  console.log(req.isAuthenticated()); // true
  res.redirect('/users/' + req.user.id );
});

しかし、プロファイルルートにensureAuthenticatedを追加すると

app.get('/users/:id', ensureAuthenticated, routes.user);

function ensureAuthenticated(req, res, next) {
  console.log(req.isAuthenticated()); // false
  if (req.isAuthenticated()) { return next(); }
  res.redirect('/');
}

ログイン後、「/users/id」(ユーザープロファイル)ではなく「/」(ログインページ)にリダイレクトされます。問題は、 req.isAuthenticated() が常に false を返し、デバッグに req.user 変数がないことです。

Express 3 とパスポートのやり取りに問題があるのでしょうか、それとも私が何か間違ったことをしたのでしょうか?

4

4 に答える 4

0

問題は、私がそれをテストして期待どおりに動作curl -L -d "name=Test&password=1"curl -Lないことでした. しかし、Webブラウザでは問題なく動作します。

于 2012-07-15T18:38:13.457 に答える
0

私もこの問題に何年も苦労していました。私にとってそれを修正したmaxAgeのは、セッションCookieのプロパティを変更することでした-以前は低すぎました:

app.use(express.cookieParser()); 
app.use(express.session({
  secret: config.session.secret,
  cookie: {
    maxAge: 1800000, //previously set to just 1800 - which was too low
    httpOnly: true
  }
}));

この変更後、req.isAuthenticated()true が返されました

于 2014-08-06T02:05:55.540 に答える
0

authenticate() はミドルウェアです。ドキュメントから:

app.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });
于 2012-07-13T16:02:15.567 に答える