在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') %>
- Omniauth-Facebook回调不会在Rails可安装引擎中初始化
- 访问Google Plus联系人google-api-ruby-client和omniauth-google-oauth2
- 设计在XHR上抛出HTTP auth并注销
- 使用Devise和Omniauth的路由问题
- 设计:新用户注册问题,PG :: ProtocolViolation。 Rails4,Postgres
- 如何在多种环境中处理OmniAuth回调?
- 记得用OmniAuth登录
- Rails 3 – 使用OmniAuth设计 – 登录后重定向转到/ users / sign_in
- 如何使用Rails和minitest模拟OmniAuth哈希?