gpt4 book ai didi

ruby-on-rails - Rake 路线未显示路线,但在硬编码时存在

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

我在登录过程中使用 Devise 和 Omniauth。出于某种原因,我可以很好地访问路线“users/auth/facebook”或“users/auth/twitter”。但是当我做 rake 路由时它们不会出现,所以我不知道获取这些路径的辅助方法是什么(例如 something_something_path)。有人可以帮我吗?

我无法显示我的所有路线,但我可以说唯一与“/users/auth/...”匹配的路线是这条路线(来自 rake 路线):

 user_omniauth_callback        /users/auth/:action/callback(.:format)    {:action=>/(?!)/, :controller=>"users/omniauth_callbacks"}

顺便说一句,当我说我“可以很好地访问路线”时,我的意思是这有效(将我正确重定向到 facebook 或 twitter):
<%= link_to "Connect", "users/auth/facebook" %>

此外,路由应该是用户模型的默认设计 omniauth 路由

最佳答案

关于为什么这没有出现在 rake routes 中,首先注意任务是如何实现的。它是 railties 的一部分, 并获取显示 as such 的路由:

Rails.application.routes.routes

所以我们可以看到它在询问 Rails.application对于它的路线。

接下来注意 Omniauth gem “是一种利用机架中间件的灵活身份验证系统”。

因为它使用 Rack 中间件,所以它对 Rails.application 一无所知。由 rake routes 使用,因此它的路线不会出现在该任务中。

您可以在 this Railcast 中获得对 Rack 中间件的很好的介绍。 .

深入一点我们可以从 rake middleware 看到那个 OmniAuth::Builder出现在堆栈中您的 rails 应用程序之前。那么它是如何处理 auth/twitter的路线?

它通过检查 request_path 来实现。在其 call ,您可以看到支票 here ,你可以看到 request_path已建成 here ( path_prefix 默认为 authname 在您的情况下为 twitter

将 Omniauth 与 Devise 一起使用时, path_prefix已自动设置,如前所述 here .

关于ruby-on-rails - Rake 路线未显示路线,但在硬编码时存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10824898/

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