在Rails 3中为OmniAuth创建命名路由

在看过Ryan优秀的Railcast Simple OmniAuth后 ,我设法在我的应用程序中实现身份validation。

一切都很好,但在我看来,我的链接看起来像这样:

  

我想知道是否有一种优雅的方法来创建一个命名路由来替换它:

   

要么:

   

OmniAuth已经处理了那些路由……在我的routes.rb文件中,我只有回调和注销的东西:

 match '/signin/:provider/callback' => 'sessions#create' match '/signout' => 'sessions#destroy', :as => :signout 

所以我不知道在哪里可以创建那些命名路线。

任何帮助将不胜感激。 谢谢。

请注意,在link_to中,您只是为路由参数提供了一个字符串。 所以你可以在helpers文件中定义一个方法。

 # application_helper.rb module ApplicationHelper def signin_path(provider) "/auth/#{provider.to_s}" end end # view file <%= link_to 'Sign in with Twitter', signin_path(:twitter) %> 

如果你想获得所有meta

 # application_helper.rb module ApplicationHelper def method_missing(name, *args, &block) if /^signin_with_(\S*)$/.match(name.to_s) "/auth/#{$1}" else super end end end #view file <%= link_to 'Sign in with Twitter', signin_with_twitter %> 

将其添加到routes.rb

get "/auth/:provider", to: lambda{ |env| [404, {}, ["Not Found"]] }, as: :oauth

现在您可以使用oauth_path url helper来生成URL。

例如。 oauth_path(:facebook) # => /auth/facebook

使用Rails 3,您可以:

 # routes.rb match '/signin/:provider/callback' => 'sessions#create', :as => :signing #view.erb <%= link_to 'twitter', signing_path(:provider => 'twitter') %> <%= link_to 'facebook', signing_path(:provider => 'facebook') %>