аутентификация в гугле по openid - PullRequest
1 голос
/ 20 сентября 2011

У меня есть приложение Rails 3.0.9, в моем session_controller у меня есть

def open_id_authentication(domain=nil)
  domain = "" if domain.nil?
  complete_identity_url = IDENTITY_URL + domain
  authenticate_with_open_id(complete_identity_url, OPENID_OPTS) do |openid_result, identity_url, registration|
    if openid_result.successful?
      matches = /\/a\/(.*)\/o8/.match(params["openid.op_endpoint"])
      google_domain = matches[1] if matches[1]
      if valid_account?(google_domain)
        account = Account.find_by_google_domain(google_domain)
        session[:account_id] = account.id
        self.current_user = User.openid_registration(registration, identity_url, account.id)
      else
        flash[:error] = t('flash.session.domain_not_registered')
        redirect_to accounts_path
        return false
    end

        redirect_back_or_default(THIS_path)
    else
      flash[:error] = t('flash.open_id.authentication_failed')
      redirect_to accounts_path
    end
  end
end

Gemfile

gem 'ruby-openid', '2.1.8'
gem 'ruby-openid-apps-discovery', '1.2.0'
gem 'open_id_authentication', '1.0.0'

Я получаю ошибку в строке

matches = /\/a\/(.*)\/o8/.match(params["openid.op_endpoint"])

потому что params не содержит такого ключа.

Раньше приложение было Rails 2.3.14, а три перечисленных гема были плагинами.Работало нормально.Кто-то выдал такую ​​вещь, помогите пожалуйста.

Спасибо!

1 Ответ

1 голос
/ 23 сентября 2011

Я решил это, заменив

matches = /\/a\/(.*)\/o8/.match(params["openid.op_endpoint"])

от

matches = /\/a\/(.*)\/o8/.match(request.env[Rack::OpenID::RESPONSE].endpoint.server_url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...