Ruby open_id_authentication с помощью Google OpenID - PullRequest
1 голос
/ 22 марта 2010

Я делаю первые шаги по реализации OpenID в моем приложении Rails. open_id_authentication оказался довольно простым в использовании плагином, поэтому я решил использовать его.

Кажется, что вход в систему с моей учетной записью Google работает идеально, однако я не получаю необходимые поля sreg / AX. Мой код в настоящее время выглядит следующим образом:

class SessionsController < ApplicationController

  def new; end

  def create
    open_id_authentication
  end


  protected
    def open_id_authentication
      authenticate_with_open_id(params[:openid_identifier], :required => ["http://axschema.org/contact/email"]) do |result, identity_url, registration|
        if result.successful?
          p registration.data
          @current_user = User.find_by_identity_url(identity_url)
          if @current_user
            successful_login
          else
            failed_login "Sorry, no user by that identity URL exists (#{identity_url})"
          end
        else
          failed_login result.message
        end
      end
    end


  private
    def successful_login
      session[:user_id] = @current_user.id
      redirect_to(root_url)
    end

    def failed_login(message)
      flash[:error] = message
      redirect_to(new_session_url)
    end
end

Я уже читал различные дискуссии о Google OpenID и все говорят только о том, что вам требуется схема AX вместо поля sreg email, но даже когда я это делаю (как вы можете видеть из кода выше) , registration.data останется пустым ({}).

Как эффективно запрашивать электронную почту от большинства поставщиков OpenID с open_id_authentication?

Ответы [ 3 ]

9 голосов
/ 22 марта 2010

authenticate_with_open_id возвращает объект Sreg, а не ответ AX. Так что вам нужно создать этот респон с помощью Rack :: OpenID :: REPONSE, например:

ax_response = OpenID::AX::FetchResponse.from_success_response(request.env[Rack::OpenID::RESPONSE])

После того, как вы сможете получить свои данные

ax_response['http://axschema.org/contact/email']
ax_response['http://axschema.org/namePerson/first']
ax_response['http://axschema.org/namePerson/last']
2 голосов
/ 01 октября 2010

Я также собрал полное решение для Ruby on Rails 3, OpenID и Google: http://blog.sethladd.com/2010/09/ruby-rails-openid-and-google.html

0 голосов
/ 19 мая 2010

В этом посте содержится хорошая стратегия использования AX для Google и Sreg для других, чтобы сделать это немного более плавным http://www.franzens.org/2009/01/using-google-federated-login-in-your.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...