2012-10-04 2 views
0

나는 Mechanize를 사용하는 Ruby 코드를 테스트 중입니다. 요청에 잘못된 OAuth 토큰을 전달할 때 Mechanize가 예기치 않은 예외를 throw합니다.왜 Mechanize는 잘못된 OAuth 자격 증명을 볼 때 "정의되지 않은 메서드"를 발생시킵니다?

나는 나쁜 토큰 내 전화를하고, 호출은 다음과 같은 예외가 발생합니다 : 내가 대답으로 게시합니다 몇 가지 추가 분석있어

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

을하지만, 사람이 추가 통찰력이있는 경우 그것은 인정 될 것이다.

이 질문을 mechanize-users 메일 링리스트에 넣으려고했지만 중재자가 게시하지 않았습니다. 이것이 올바른 사용법이다

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

the OAuth spec의 내 독서에서 :

+0

왜 'nil.any?'가 오류를 발생시키는가요? – pguardiario

+0

제 질문은 - 왜 oauth 토큰이 나쁜 요청을 보낼 때 Mechanize가 예기치 않게 동작 (관련없는 예외가 발생) 했습니까? Mechanize는 토큰이 나쁘다고 알려주는 데 필요한 모든 정보를 가지고 있지만 대신이 정의되지 않은 메서드 예외를 발생시킵니다. 나는 약간의 분석을했고, 나의 가장 좋은 추측은 아래의 첫 번째 대답으로 보여진다; 하지만 실제로 코드에 익숙한 사람이 실제로 확인하거나 수정하는 것을보고 싶습니다. – Bruce

+0

누가 신경 쓰나요? NoChallengesException을 발생 시키면 아마 더 나을 것이지만 같은 방식으로 처리하고 오류를 잡아서 처리하십시오. – pguardiario

답변

0

초기 응답은 오류 정보와 WWW 인증 헤더가 포함되어 있습니다. 그러나 Mechanize 코드를 살펴보면, Mechanize는 WWW-AUTHENTICATE 헤더에 인증을 통해 요청을 재 시도하는 방법을 설명하는 하나 이상의 문제가 있다고 가정합니다. 내가 특별히 agent.rb에서 자신을 찾을 : #response_authenticate 702을,이 자격 증명을 검사 여기서

@auth_store.credentials? 

그리고 차례로 그 방법은 #any를 호출? nil의 오브젝트에 대해,이 헤더에서 어떤 도전을 구문 분석 관리하지 않았기 때문에 :

def credentials? uri, challenges 
    challenges.any? do |challenge| 
     credentials_for uri, challenge.realm_name 
    end 
end 
1

당신이 기계화보다 볼 수 있습니다 here을 보면 : HTTP : WWWAuthenticateParser # 구문 분석은 특정 조건 하에서 전무를 반환 할 수 있습니다 (이 글의 83 번째 줄) 나는 이것이 왜 유용 할 지 모르지만 당신의 대답이있다.