Стратегия Google OpenID не работает в Rails

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

gem 'omniauth'
gem 'omniauth-openid'
gem 'devise'

config / initializers / omniauth.rb

require 'openid/store/filesystem'
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :open_id, :store => OpenID::Store::Filesystem.new('/tmp'), :name => 'google', 
    :identifier => 'https://www.google.com/accounts/o8/id', :require => 'omniauth-openid'
end

OmniAuth.config.on_failure = Proc.new do |env|
    OmniAuth::FailureEndpoint.new(env).redirect_to_failure 

конец

Также есть ссылка на странице

<% if current_user %>
  Welcome <%= current_user.name %>!
  <%= link_to "Sign Out", signout_path %>
<% else %>
  <%= link_to "Sign in with Google", "/auth/google" %>

<% end %>

Когда меня перенаправляют на страницу входа в Google, я нажимаю "Разрешить", и меня перенаправляют обратно на ... / auth / failure? Message = invalid_credentials & strategy = google по какой-то причине, несмотря на то, что что я вошел правильно.

вот журнал Webrick:

Started GET "/auth/google" for 127.0.0.1 at 2012-12-20 12:45:13 +0700
(google) Callback phase initiated.
Error attempting to use stored discovery information: OpenID::TypeURIMismatch
Attempting discovery to verify endpoint
Performing discovery on https://www.google.com/accounts/o8/id?id=323221212143243243
WARNING: making https request to https://www.google.com/accounts/o8/id?id=2121212143243243243243 without verifying server certificate; no CA path was specified.
(google) Callback phase initiated.
(google) Authentication failure! invalid_credentials encountered.


Started GET "/auth/google/callback?_method=post&openid.ns= .... very long string" for 127.0.0.1 at 2012-12-20 12:45:18 +0700


Started GET "/auth/failure?message=invalid_credentials&strategy=google" for 127.0.0.1 at 2012-12-20 12:45:18 +0700

Что я сделал не так?


person Alan Coromano    schedule 20.12.2012    source источник


Ответы (1)


Вы не делаете ничего плохого в одном слове. К сожалению, ответ Google от OpenID - это ОЧЕНЬ длинный URL. Пока это больше, чем 256 символов, которые может обработать вебрик.

Если вы добавите еще один сервер в свой гем-файл, например:

gem 'thin'

а затем запустите сервер следующим образом:

rails s thin

тогда вы должны обнаружить, что вход в систему через Google - это нормально.

person loz    schedule 20.12.2012
comment
Итак, Алан, когда ты исчерпываешься, что теперь говорит журнал? - person loz; 21.12.2012
comment
Здесь сказано то же, что и Уэбрик. - person Alan Coromano; 21.12.2012