0

内部で Mechanize を使用する Ruby コードをテストしています。リクエストで不正な OAuth トークンを渡すと、Mechanize が予期しない例外をスローすることがわかりました。

不正なトークンを使用して呼び出しを行うと、呼び出しで次の例外が発生します。

#<NoMethodError: undefined method `any?' for nil:NilClass>

回答として投稿する追加の分析がありますが、誰かが追加の洞察を持っている場合は、それをいただければ幸いです。

この質問を mechanize-users メーリング リストに投稿しようとしましたが、モデレーターは投稿しませんでした。

4

2 に答える 2

1

ここを見ると、Mechanize::HTTP::WWWAuthenticateParser#parse が特定の条件下で nil を返すことができることがわかります (この投稿の時点で 83 行目)。これが役立つ理由はわかりませんが、答えがあります。

于 2012-10-04T13:57:30.767 に答える
0

最初の応答には、エラー情報を含む WWW-AUTHENTICATE ヘッダーが含まれています。

response-header: www-authenticate => Bearer realm=api.att.com,error=invalid_token, error_description=the token is not valid

OAuth仕様を読んだところ、これは正しい使い方です。ただし、Mechanize コードをトレースすると、Mechanize は WWW-AUTHENTICATE ヘッダーに、認証を使用してリクエストを再試行する方法を説明する 1 つ以上のチャレンジが含まれていると想定していることがわかります。具体的には、#response_authenticate の agent.rb:702 で、次の資格情報をチェックします。

@auth_store.credentials?

そして、そのメソッドは #any? を呼び出します。ヘッダーからチャレンジを解析できなかったため、nil オブジェクトで:

def credentials? uri, challenges
    challenges.any? do |challenge|
        credentials_for uri, challenge.realm_name
    end
end
于 2012-10-04T05:29:35.517 に答える