Может ли кто-нибудь помочь мне разобраться в этой проблеме?
Я использую Devise + Omniauth в приложении Rails 3.2. Что я хочу знать, так это то, что происходит за кулисами с методом Девиза user_omniauth_authorize_path(provider)
.
Я просмотрел рейк-маршруты и источник драгоценного камня, но не вижу ничего очевидного, что могло бы вызвать проблему, с которой я столкнулся.
Я предполагаю, что этот метод просто вызывает URL-адрес входа провайдера (, например.Twitter ), а затем возвращается к пути обратного вызова, определенному в route.rb.
У меня в route.rb
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks'}
devise_scope :user do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
В users/omniauth _обратные вызовы _controller.rb у меня
def twitter
render :text => "This works"
end
def passthru
render :text => "This doesn't work"
end
В представлении у меня <%= link_to "Twitter", user_omniauth_authorize_path(:twitter) %>
. Щелкнув по этой ссылке, вы попадете в Твиттер, где я могу войти в систему, но по возвращении в свое приложение я получаю сообщение об ошибке «Вы уже вошли в систему».
Я не могу понять, как и почему возникает эта ошибка. Я должен видеть только «Это работает» или «Это не работает».
Точно так же у меня настроен провайдер Facebook, и он работает так, как ожидалось.
Если я заменю ссылку omniauth Devise на <a href="/users/auth/twitter">Twitter</a>
, я получу сообщение «Это работает».
Итак, это решает мою проблему, но это не идеально, и я хотел бы знать, почему.
Кто-нибудь может пролить свет?
РЕДАКТИРОВАТЬ
Rake-маршруты выглядят следующим образом:
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:twitter|facebook)