Почему обратный вызов #39;t Devise + Omniauth не попадает в правильный контроллер?

Может ли кто-нибудь помочь мне разобраться в этой проблеме?

Я использую 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)
6
задан Andy Harvey 3 May 2012 в 14:39
поделиться