Получить атрибуты OpenID AX из Google / Yahoo в Rails - PullRequest
4 голосов
/ 24 декабря 2009

Я использую плагин 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

Насколько я понимаю, я отправляю адрес электронной почты (как sreg, так и AX) как обязательно , и я должен иметь возможность извлечь их из экземпляра registration, который передается вместе с ответом.

Когда я вхожу в Google, адрес электронной почты возвращается как 't'.

Я неправильно обращаюсь с этим? Как я могу получить адрес электронной почты пользователя от Google? Придется ли мне прыгать через другие обручи для поддержки Yahoo?

Ответы [ 4 ]

7 голосов
/ 25 декабря 2009

Я сам решил эту проблему. Было нелегко найти официальные документы, в которых поддерживаются URL-адреса схемы AX.

Вот что я нашел:

Google будет отвечать только на адрес электронной почты, используя схему AX: http://schema.openid.net/contact/email

Yahoo ответит на псевдоним и электронную почту, используя следующие схемы AX:

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

Поэтому мне нужно запросить в основном все известные URL-адреса схемы AX для адреса электронной почты и надеяться, что поставщик отправит их. / Пожав плечами

2 голосов
/ 28 октября 2010

Как уже упоминалось в другом постере, Google теперь отвечает на AX-схему для электронной почты. Я знаю, что этот пост был написан некоторое время назад, но Google до сих пор не отвечает на namePerson. Тем не менее, они предоставляют:

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

Поэтому, чтобы ответить на вопрос Шрипада К выше, вы могли бы сделать, используя приведенный выше код в качестве примера:

name = [
        registration['http://axschema.org/namePerson/first'],
        registration['http://axschema.org/namePerson/last']
       ].join(" ")
1 голос
/ 24 декабря 2009

Я не знаю библиотеку Ruby OpenID, которую вы используете очень хорошо, но похоже, что вы пытаетесь использовать AX, смешивая атрибуты URI типа атрибута с расширением Simple Registration, которое является совершенно другим зверем. Вам следует (поскольку я не знаю это наизусть) проверить документы или образцы для использования OpenID с библиотекой, которую вы используете специально для AX, и убедиться, что вы следуете правильным шагам. Google поддерживает только AX, тогда как Yahoo поддерживает простую регистрацию (я не уверен, что Yahoo также поддерживает AX).

0 голосов
/ 18 января 2013

Для меня он все еще не работал с http://schema.openid.net/contact/email, но обнаружил здесь https://groups.google.com/forum/?fromgroups=#!topic/google-federated-login-api/dOrQ8Ho5BGI, что это должно быть openid.ax.required , и это сработало.

...