angularjs フロントエンドで使用する REST API サーバーを構築しています。すべてのリクエストで実行されるミドルウェアを実装しようとしています。すべてのリクエストに対して、存在する場合はAPIトークンをチェックし、有効かどうかを継続的にチェックし、存在しない場合はリクエストを終了せずに無許可の応答を返します。
ミドルウェアを追加しようとする前にリクエストは機能しますが、ミドルウェアを追加しようとしたり、メインルートの前にルートをキャッチしようとするとすぐにタイムアウトになります。
http://localhost:3000/developer/test?api=fhgjtyd6fjrj4off6r4rhgjdldksrghiue750f
{
response: {
id: "test",
api: "fhgjtyd6fjrj4off6r4rhgjdldksrghiue750f"
}
}
これらのルートはどちらも機能しますが、私はリソース バージョンを好みます。( http://locomotivejs.org/guide/routing/ )
this.match('/developer', { controller: 'developer', action: 'show' });
this.resources('developer');
これは私が従おうとしてきた例です。なぜなら、それは私がしなければならないことのほとんどのように見えるからです。( http://webapplog.com/intro-to-express-js-parameters-error-handling-and-other-middleware/ )、しかし現在、このようなものを実装しようとするたびに、ルートがタイムアウトします。メソッド内で console.log() 何かが発生しますが、取得できない何かを待っているように動作します。next() を使用しようとすると、未定義のエラーが発生し、アプリを Authenticator またはその他のオブジェクトに挿入したくありません。
function requiredParamHandler(param){
//do something with a param, e.g., check that it's present in a query string
return function (req,res, next) {
//use param, e.g., if token is valid proceed with next();
next();
});
}
app.get('/api/v1/stories/:id', requiredParamHandler('token'), story.show);
var story = {
show: function (req, res, next) {
//do some logic, e.g., restrict fields to output
return res.send();
}
}
APIトークンをチェックして検証するためのメソッドを含むAuthモジュールの構築を開始しました。
var Authenticator = function () {
this.requireApiToken = function() {
console.log('requireApiToken');
}
};
module.exports = Authenticator;
私はエクスプレスが下のAPIリファレンスドキュメントで行うように言っているようにしようとしました
app.all(path, [callback...], callback)
app.all('/api/*', requireAuthentication);
上記の行を機関車 config/environments/all.js 内に追加しました
auth = new Authenticator();
this.express.all('*', auth.requireApiToken);
しかし、これはルートがタイムアウトし始めたときであり、エラーなども発生しません。
また、通常のルーティング方法を使用してみましたが、同じことを行います。
this.match('/developer/:id', auth.requireApiToken, { controller: 'developer', action: 'show' });
サーバーに来るすべてのルートをキャッチし、API トークンがクエリ文字列に存在するかどうかを確認したいと考えています。存在しない場合は、無許可の応答を送り返し、存在する場合はチェックを行い、すべてが正常であれば、正しいルート/コントローラーへのルーティングを続行します。機関車を使用してこれをどのように達成し、ルートがタイムアウトしないようにしますか?