gpt4 book ai didi

ruby-on-rails - 为什么 Devise + Omniauth 回调没有命中正确的 Controller ?

转载 作者:行者123 更新时间:2023-12-04 16:00:20 24 4
gpt4 key购买 nike

谁能帮我找出这个问题的根源?

我在 Rails 3.2 应用程序中使用 Devise + Omniauth。我想知道的是,Devise 的 user_omniauth_authorize_path(provider) 幕后发生了什么方法。

我已经对 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

在 View 中我有 <%= link_to "Twitter", user_omniauth_authorize_path(:twitter) %> .单击此链接将转到 Twitter,我可以在其中登录,但在返回到我的应用程序时,我收到错误消息“您已登录”。

我无法弄清楚如何或为什么会产生此错误。我应该只看到“这行得通”或“这行不通”。

我也有一个以完全相同的方式设置的 Facebook 提供商,这按预期工作。

如果我用 <a href="/users/auth/twitter">Twitter</a> 替换 Devise 的 omniauth 链接然后我得到“这个作品”。

所以这解决了我的问题,但它并不理想,我想知道为什么。

任何人都可以发光吗?

编辑

Rake 路由看起来像这样:
user_omniauth_callback        /users/auth/:action/callback(.:format)                       users/omniauth_callbacks#(?-mix:twitter|facebook)

最佳答案

嗯,它对我有用,所以它绝对是你的目标。首先,您是否在控制台中比较了 GET 调用 /users/auth/twitter/users/auth/twitter?callback通过2种不同的方法获得?它们应该看起来完全一样(当然,除了 token 和验证器)。

现在,我不确定这是否相关,但是使用 devise 您不使用 passthru 路由,因此您可以删除该路由。相反,在您的回调 Controller 中,您应该实现一个称为失败的操作来处理错误的请求。 See here用于设计的实现。

我在这里捕获了稻草,但你也应该在回调 Controller 的末尾有这个:

# This is necessary since Rails 3.0.4
# See https://github.com/intridea/omniauth/issues/185
# and http://www.arailsdemo.com/posts/44
protected
def handle_unverified_request
true
end

关于ruby-on-rails - 为什么 Devise + Omniauth 回调没有命中正确的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com