6

現在、既存の API を で表現しようとしていますapiary.io。システムは、セッション ID を含む http-cookie を返すログイン要求を介して認証を実装します。

私の知る限り、別のリクエストを行うときに、ブラウザがホストから以前に受信したすべての http-cookie をブラウザに送信するのが標準です。

私の設計図ファイルによって生成されたテストを実行するとき、これは Dredd によって行われていないようです。このため、ユーザーのログインが必要なリクエストは、テストでは正しく機能しません。

Dredd にこれらの http-cookie の管理を強制するために、リクエストを「このリクエストを実行する前に必要」としてそれぞれマークする可能性はありますか?

ところで、REST サービスはSails.jsの mvc フレームワークである に実装されていnode.jsます。

4

2 に答える 2

1

これは古いですが、同じ問題に遭遇したばかりで、dredd のドキュメントはかなり古くなっています (皮肉なことではありませんか?!)。

フックを使用して、応答と要求の本文とヘッダーを読み取って上書きできます(これはトピックで見つけた最新のページですが、まだ問題とタイプミスがあります)。1 つの注意点は、dredd には Cookie のヘルパーがないように見えるため、Cookie ヘッダーを自分で解析して構築する必要があることです。

私の場合、sessionIdは json 本体と Cookie で返されます。本体を解析した方が簡単ですが、必要に応じて応答 Cookie からセッションを取得することもできます。これは、認証を機能させるために私が書いたフックの大まかなものです。

hooks = require('hooks');
stash = {}

// hook to retrieve session on a login
hooks.after('Auth > /remoteauth/userpass > POST', function(transaction){
  stash['token'] = JSON.parse(transaction.real.body)['sessionId'];
});

// hook to set the session cookie in all following requests
hooks.beforeEach(function(transaction){
  if(stash['token'] != undefined){
    transaction.request['headers']['Cookie'] = "id=" + stash['token']
  };
});

ドキュメントはフックの設定方法を説明していますが、私をつまずかせたのは、同じディレクトリにファイルがあるとdredd --namesコマンドが機能しないことですdredd.yml(ファイルが存在すると、dreddがすべてのコマンドライン引数を無視するようです)。

于 2015-05-09T01:46:01.140 に答える