3

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 トークンがクエリ文字列に存在するかどうかを確認したいと考えています。存在しない場合は、無許可の応答を送り返し、存在する場合はチェックを行い、すべてが正常であれば、正しいルート/コントローラーへのルーティングを続行します。機関車を使用してこれをどのように達成し、ルートがタイムアウトしないようにしますか?

4

1 に答える 1

6

適切なミドルウェアとして機能する必要がありますが、そうではありませrequireApiTokenん (それは単なるconsole.log何かです)。

ミドルウェアでは、応答を返すか、次のnext関数を使用してミドルウェア チェーンを実行し続ける必要があります。

var Authenticator = function () {

  this.requireApiToken = function(req, res, next) {
    console.log('requireApiToken');
    next();
  };

};

module.exports = Authenticator;

また、Locomotive は Express からいくつかの機能をコピーするので、それらを直接使用でき、機能させるために使用する必要はありませんthis.express。したがって、これも機能するはずです(でconfig/environment/*.js):

var auth = new Authenticator;
this.use(auth.requestApiToken);
于 2013-11-05T20:14:26.330 に答える