Ruby on rails 我可以命名Omniauth身份验证路由吗?

Ruby on rails 我可以命名Omniauth身份验证路由吗?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,omniauth,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Omniauth,我已经将Omniauth添加到我的rails 3.1项目中,一切正常。当我访问hostname/auth/facebook时,我会被带到一个页面,在那里我可以像您所期望的那样授权访问我的facebook帐户 我想知道是否可以命名该路线,以便在我的链接到助手中编写 <%= link_to 'Login with Facebook', facebook_login_path %> 而不是 <%= link_to 'Login with Facebook', '/auth/fa

我已经将Omniauth添加到我的rails 3.1项目中,一切正常。当我访问
hostname/auth/facebook
时,我会被带到一个页面,在那里我可以像您所期望的那样授权访问我的facebook帐户

我想知道是否可以命名该路线,以便在我的
链接到
助手中编写

<%= link_to 'Login with Facebook', facebook_login_path %>

而不是

<%= link_to 'Login with Facebook', '/auth/facebook' %>


我知道这不是一件大事,但我喜欢它的一致性。

通常您会这样做:在routes.rb文件中:

get "auth/facebook", :to => "controller#action", :as => "facebook_login"
但在本例中,发送到的url实际上不是应用程序的url部分,而是Facebook的oauth url。因此,您无法为其创建路由

你唯一能做的事情——就像上面的评论指出的那样——是在你的一个助手文件中创建一个助手方法——比如app/helpers/application_helper.rb

def facebook_login_path
  "/auth/facebook"
end

你试过了吗?:
match'/auth/facebook'
=>'/auth/facebook',:as=>facebook\u loginYeah我试过了,但失败了,因为它认为我匹配的是“/auth”控制器,控制器不能以斜杠开头。如果没有斜杠,它将失败,因为没有身份验证控制器!是的,这是因为Rails需要在内部使用
route.rb
文件(它只是将传入的http请求转换为REST样式(应该有控制器和操作来处理)。在OAuth/OpenID情况下,您向外部服务发送请求,所以您可以做的任何事情都是在
application\u helper
文件中创建helper方法(def facebook\u login\u path)/auth/facebook;end)