3

したがって、hapi rest api へのすべての http ルートで有効な api キーを確認したいと思います。APIトークンチェックに加えて、いくつかのルートで基本認証も行うため、認証プラグインを使用したくありません。私はエクスプレスでミドルウェアとしてこれを行うことに慣れていますが、hapi で正しい方法は何ですか?

これを実現するには、独自のプラグインを作成するか、代わりに server.ext を使用する必要がありますか?それとも、別の方法で行う必要がありますか?

これまでのところ、これは私がやった方法です

server.ext('onRequest', function (request, next) {

    //make sure its https
    if(request.headers['x-forwarded-proto'] && request.headers['x-forwarded-proto'] === "http") {
        return next(Boom.badRequest('ssl is required'));
    }
    else
    {
        if (request.headers['x-api-key'] != apiToken) {
            return next(Boom.unauthorized('api key is incorrect'));
        }
        else
        {
            next();
        }
    }
});
4

2 に答える 2

0

Gergo の応答は良好ですが、次のような方法で動作するための戦略も必要な同様のユース ケースがあります。

A (Succeed) --> B (Succeed) --> Handler

A (Fail) --> reply(4xx) || A(succeed) --> B (fail) --> reply(4xx)

こんな感じで処理しました

server.ext('onPostAuth', function(request, reply) {
  request.server.auth.test('A', request, function(err) {
    return err ? reply(err) : reply.continue();
  });
});

server.ext('onPostAuth', function(request, reply) {
  request.server.auth.test('B', request, function(err) {
    return err ? reply(err) : reply.continue();
  });
});
于 2015-02-20T15:19:19.907 に答える