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 标头将包含一个或多个挑战,描述如何通过身份验证重试请求。我特别发现自己在#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 回答