4

私は、grunt/yeomanでpassport.jsを使用する方法を考え出そうとしています。私は次のものを持っています:

// at the top of my gruntfile.js
var passport = require('passport');
var BasicStrategy = require('passport-http').BasicStrategy;

passport.use(new BasicStrategy(
  function(username, password, done) {
    return done(null, true); // I would expect this to always succeed, but still challenge for credentials
  }
));

// further down in my connect config.
livereload: {
    options: {
        middleware: function (connect) {
            return [
                lrSnippet,
                passport.initialize(),
                passport.authenticate('basic', { session: false }),
                mountFolder(connect, '.tmp'),
                mountFolder(connect, yeomanConfig.app)
            ];
        }
    }
}

すべてのリクエストで、レスポンスにはunauthorized. への呼び出しを削除するとpassport.authenticate、ページは機能しますが、明らかに認証はありません。私はミドルウェアの順序を変更しようとしましたが、それは役に立ちませんでした。私はヨーマン/うなり声の専門家にはほど遠いので、他に何を試すべきか完全にはわかりません...

どんな助けでも大歓迎です。

4

1 に答える 1

0

done()コールバック内にオブジェクトを渡す必要があると思いBasicStrategyます。私が思い出したように、passport JS はこのオブジェクトを使用して高速アプリで req.user を設定しobjectますboolean

これは、私が多くのアプリで使用している同じ関数のより堅牢な例です。

  passport.use(new BasicStrategy(
    function(clientID, clientSecret, done) {
      AuthClient.findOne({ clientID: clientID }, function(err, client) {
        if (err) { return done(err); }
        if (!client) { return done(null, false); }
        if (client.secret != clientSecret) { return done(null, false); }
        return done(null, client);
      });
    }
  ));

ご覧のとおり、BasicStrategy は、ユーザー名とパスワードの組み合わせに相当する clientID と clientSecret を分析するために使用されます。私の例に示されているように、実際にはデータベースからプルしていないので、上記の提案に従って に渡すだけで、うまくいくと思い{}ますdone(null, {})

于 2014-01-05T07:28:07.137 に答える