2009-12-24 5 views
4

내 응용 프로그램에 레일 플러그인 open_id_authentication을 사용하고 있습니다. 이 작업은 MyOpenID에서 가능하지만 Google 인증을 사용하면 필수 속성의 일부로 이메일 주소를 가져올 수 없습니다.Google/Yahoo in Rails에서 OpenID AX 특성 검색

내가 아는 바로는 Google은 sreg 속성 요청을 무시하고 전자 메일 주소에 대해서만 AX 스키마를 수신합니다.

 def open_id_authentication(openid_url) 

     #google only responds to AX for email, so we must provide that also 
     authenticate_with_open_id(openid_url, :required => [:nickname, :email, 'http://axschema.org/contact/email']) do |result, identity_url, registration| 
     if result.successful?  
     @user = User.find_or_initialize_by_identity_url(identity_url) 
     if @user.new_record?    
      unless registration['email'] || registration['http://axschema.org/contact/email']   
       failed_login "Your OpenID provider didn't send us an email address." 
       return 
       end 

      #some providers (like Google) won't send a nick name. We'll use email instead for those 
      nick = registration['nickname'] 
      nick |= registration['email'] 
      nick |= registration['http://axschema.org/contact/email'] 

      email = registration['email']; 
      email |= registration['http://axschema.org/contact/email'] 

      @user.login = nick 
      @user.email = email 
      @user.save(false) 
    end 
    self.current_user = @user 
    successful_login 
    else 
     failed_login result.message 
    end 
    end 

나의 이해는 내가 필요으로 이메일 주소 (sreg 및 AX 모두)를 제출하고 내가 전달되는 registration 예에서 그들을 끌어 할 수 있어야한다는 것입니다 : 여기

내 코드입니다 응답과 함께.

Google에 로그인하면 이메일 주소가 't'로 다시 전달됩니다.

이 문제를 올바르게 처리하고 있습니까? Google에서 사용자의 이메일 주소를 얻으려면 어떻게해야합니까? 야후를 지원하기 위해 다른 농구를 뛰어 넘어야합니까?

답변

7

나는이 문제를 직접 해결했다. AX 스키마 URL이 지원되는 공식 문서를 찾는 것은 쉽지 않았습니다. 여기

내가 무엇을 발견 :

구글은 AX 스키마를 사용하여 이메일 주소 만 응답 : http://schema.openid.net/contact/email

야후는 이러한 AX 스키마를 사용하여 별명에 & 이메일을 응답 : 그래서

http://axschema.org/namePerson/friendly 
http://axschema.org/contact/email 

을 기본적으로 전자 메일 주소에 대해 알려진 AX 스키마 URL을 모두 요청해야하며 공급자가이 URL을 보내길 바랍니다./shrug

+2

아, 내 블로그 게시물이 마음에 듭니다. http://blog.nerdbank.net/2009/03/how-to-pretty-much-guarantee-that-you.html 덧붙여 말하자면, Google은 axschema.org 형식도 꽤 확신합니다. –

+0

이메일에 대해 3 개의 다른 URL이 있지만 google은 http://schema.openid.net/contact/email (내 테스트에서)에만 응답합니다. 이것은 매우 성가시다. 속성 교환과 관련하여 좀 더 유연 해지지 않아야 할 것처럼 보입니다. –

+0

Google이 axschema.org URL에 응답하지 않는 이유를 모르겠습니다. 여기에 하나 있고 실행 : http://testingauth.heroku.com, 출처 : http://github.com/shripadk/authlogic_openid_selector_example, 어느 정도는 stackoverflow 자동 등록과 유사합니다. axschema 형식을 사용하고 Google은 이메일 ID로 응답합니다. –

1

잘 사용하고있는 Ruby OpenID 라이브러리에 대해 잘 모릅니다. 그러나 매우 다른 짐승 인 Simple Registration 확장에 속성 유형 URI를 혼합하여 AX를 사용하려는 것 같습니다. AX에서 특별히 사용하고있는 라이브러리에서 OpenID 용 문서 또는 샘플을 확인하고 올바른 단계를 따르고 있는지 확인해야합니다. 구글은 AX 만 지원하고 야후는 단순 등록을 지원한다. 야후가 AX를 지원할 지 모르겠다.

+0

야후는 AX : http://developer.yahoo.net/blog/archives/2009/12/yahoo_openid_now_with_attribute_exchange.html – dhofstet

+1

을 지원합니다. 그 플러그인의 README 맨 아래에는 루비를 전달하는 예제가 있습니다. 기호 또는 문자열 (AX의 경우). 표시되지 않는 것은 검색입니다. –

2

다른 포스터는 이미 언급했듯이 Google은 AX 스키마에 전자 메일로 응답합니다. 나는이 게시물이 얼마 전 작성된 것을 알고 있지만 Google은 여전히 ​​namePerson에 응답하지 않습니다. 그러나, 그들은 제공 않습니다

http://axschema.org/namePerson/first 
http://axschema.org/namePerson/last 

을 따라서, 위의 Shripad K의 질문에 대답하기 위해, 당신이 할 수있는, 예를 들어 위의 코드를 사용하여 : 그것은 여전히 ​​작동하지 않았다 나를 위해

name = [ 
     registration['http://axschema.org/namePerson/first'], 
     registration['http://axschema.org/namePerson/last'] 
     ].join(" ") 
관련 문제