代码之家  ›  专栏  ›  技术社区  ›  Ben Scheirman

在Rails中从Google/Yahoo检索OpenID AX属性

  •  4
  • Ben Scheirman  · 技术社区  · 15 年前

    我正在使用rails插件 open_id_authentication 在我的应用程序中。这适用于MyOpenID,但是通过Google身份验证,我无法将电子邮件地址作为所需属性的一部分。

    据我所知,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
    

    registration 随响应一起传递的实例。

    我处理得不对吗?如何从谷歌获取用户的电子邮件地址?为了支持雅虎,我还需要跳出其他障碍吗?

    4 回复  |  直到 12 年前
        1
  •  7
  •   Ben Scheirman    15 年前

    最后我自己解决了这个问题。要找到支持AX模式URL的官方文档并不容易。

    以下是我的发现:

    Google将仅使用AX模式响应电子邮件地址: http://schema.openid.net/contact/email

    雅虎将对alias&使用以下AX模式发送电子邮件:

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

    所以我需要请求电子邮件地址的所有已知AX模式URL,并希望提供商发送它/耸肩

        2
  •  2
  •   Sean Hill    14 年前

    正如另一张海报已经提到的,谷歌现在响应电子邮件的AX模式。我知道这篇文章是不久前写的,但谷歌仍然没有回复namePerson。然而,它们确实提供:

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

    因此,要回答Shripad Shrik的上述问题,您可以使用上面的代码作为示例:

    name = [
            registration['http://axschema.org/namePerson/first'],
            registration['http://axschema.org/namePerson/last']
           ].join(" ")
    
        3
  •  1
  •   Andrew Arnott    15 年前

        4
  •  0
  •   Peter Hudec    11 年前

    http://schema.openid.net/contact/email 但是在这里发现的 https://groups.google.com/forum/?fromgroups=#!topic/google-federated-login-api/dOrQ8Ho5BGI 那一定是 需要openid.ax