任何人都可以帮我解决这个问题吗?
我在 Rails 3.2 应用程序中使用 Devise + Omniauth。user_omniauth_authorize_path(provider)
我想知道的是,使用 Devise 的方法在幕后发生了什么。
我已经通过 rake 路线和 gem 的来源进行了挖掘,但我看不到任何明显会导致我遇到的问题的东西。
我假设此方法只是调用提供者的登录 url(例如 Twitter),然后返回到 routes.rb 中定义的回调路径。
在我的 routes.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_callbacks_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) %>
。单击此链接会转到 Twitter,我可以在其中登录,但返回我的应用程序后,我收到错误消息“您已经登录”。
我无法弄清楚如何或为什么会生成此错误。我应该只看到“这行得通”或“这行不通”。
我还以完全相同的方式设置了 Facebook 提供程序,并且按预期工作。
如果我将 Devise 的omniauth 链接替换为<a href="/users/auth/twitter">Twitter</a>
“This works”。
所以这解决了我的问题,但它并不理想,我想知道为什么。
任何人都可以解释一下吗?
编辑
耙路线看起来像这样:
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:twitter|facebook)