我正在测试一些使用Mechanize的Ruby代码。我发现当我在请求中传递错误的OAuth令牌时,Mechanize会抛出意外的异常。
我使用错误令牌进行调用,并且调用引发以下异常:
#<NoMethodError: undefined method `any?' for nil:NilClass>
我有一些额外的分析,我会将其作为答案发布,但如果有人有其他见解,我们将不胜感激。
我尝试将此问题放在mechanize-users邮件列表中,但主持人没有发布。
答案 0 :(得分:1)
如果你看here你可以看到比Mechanize :: HTTP :: WWWAuthenticateParser #parse在某些情况下可以返回nil(截至本文第83行)我不知道为什么这可能有用但是有你的答案。
答案 1 :(得分:0)
初始响应包含带有错误信息的WWW-AUTHENTICATE标头:
response-header: www-authenticate => Bearer realm=api.att.com,error=invalid_token, error_description=the token is not valid
从我对the OAuth spec的阅读中,这是正确的用法。但是,通过Mechanize代码进行跟踪,我发现Mechanize假定WWW-AUTHENTICATE标头将包含一个或多个挑战,描述如何通过身份验证重试请求。我特意发现自己在#response_authenticate中的agent.rb:702,在那里它检查凭据:
@auth_store.credentials?
那个方法反过来调用#any?在一个零对象上,因为它无法解析标题中的任何挑战:
def credentials? uri, challenges
challenges.any? do |challenge|
credentials_for uri, challenge.realm_name
end
end