2016-09-05 3 views
0

私はKrakenプロジェクトで認証にPassportを使用しています。 私はauthenticateを呼び出すと、 "failWithError:true"を渡すので、 "next"コールバックにエラーが渡されます。KrakenJSでは、Passportミドルウェアを別のものの前に宣言する方法は?

"errorHandler": { 
    "priority": 130, 
    "module": "path:./lib/errorHandler" 
} 

私の問題は、パスポートが直接エラーを返すということですので、私はそれが優先順位の問題だと思う:私は、config.jsonでこのように宣言ErrorHandlerのミドルウェアを持っています。私はこのようなパスポートを登録しようとしている

app.requestBeforeRoute = function requestBeforeRoute(server) { 
    server.use(passport.initialize()); 
}; 
passport.use(auth.localApiKeyStrategy()); 

そして、このような:

app.on('middleware:before:errorHandler', function (eventargs) { 
    passport.use(auth.localApiKeyStrategy()); 
    app.use(passport.initialize()); 
}); 

しかし、それは働いていません。 また、私はこれを発見した:Adding a way to configure a scope to factory functionしかし、私は実際にそれを動作させる方法を持っていない。

ありがとうございました。

答えて

0

最後に、私は解決策を出しました。私の場合、私はREST APIを開発しているので、パスポートからセッションミドルウェアは必要ありません。

まず、config.jsonでパスポートの宣言:

"passport": { 
    "enabled": true, 
    "priority": 10, 
    "module": { 
     "name": "passport", 
     "method": "initialize" 
    } 
} 

はその後index.jsに、私は自分の戦略を使用するには、パスポートを言う:

最後に
passport.use(auth.localApiKeyStrategy()); 

、モデルのコントローラにパスポートのドキュメントをすることができます言うように私は私がauth.js

router.get('/', function(req, res, next) { 
    auth.authenticate(req, res, next, function() { 
     // authenticated 
     // stuff to do when authenticated 
    }); 
}); 

// auth.js 
exports.authenticate = function(req, res, next, callback) { 
    passport.authenticate('localapikey', function(err, device) { 
     if (err) { 
      return next(err); 
     } 
     if (!device) { 
      err = new Error(); 
      err.code = statusWell.UNAUTHORIZED; 
      return next(err); 
     } 
     callback(); 
    })(req, res, next); 
}; 

今私ができる時間に位置することを、カスタムコールバックを実装しましたそして、次の関数を使用してerrorHandlerミドルウェアにエラーを渡します。

関連する問題