Rails 3路由约束和正则表达式
我希望匹配路径中的模式state/city
,除非状态变量等于“auth”
match '/:state/:city' => 'cities#index', :as => :state_cities, :constraints => {:state => /(?!auth)/ }
例如, mydomain.com/fl/miami
很好。 mydomain.com/auth/twitter
很糟糕。
我正在使用omniauth,它要求你去/auth/twitter
进行身份validation,但是当我输入rake routes
时无处可寻。
根据mu太短的评论,这是我提出的答案:
match '/:state/:city' => 'cities#index', :as => :state_cities, :constraints => OmniauthPassThru.new
LIB / omniauth_pass_thru.rb
class OmniauthPassThru def initialize @passthru = ["/auth/facebook", "/auth/twitter"] end def matches?(request) return false if @passthru.include?(request.fullpath) true end end
您应该能够在州/城市路线之前定义/auth
路线:
路线优先
并非所有路线都是平等创建的。 路由的优先级由config / routes.rb文件中路由的出现顺序定义。 优先级从上到下。
所以这个订单应该做正确的事情:
match '/auth/twitter' => ... match '/:state/:city' => ...
您可能希望通过将州/城市路由放入其自己的命名空间来完全避免此问题:
match '/place/:state/:city' => ...
这使得最高级别可以用于其他未来用途。
- 路由错误未初始化的常量用户
- 如何检查用户是否使用omniauth登录
- Facebook令牌到期和续约,与考拉和omniauth-facebook
- 什么是omniauth和电子邮件密码注册最佳实践?
- 如何使用刷新令牌刷新google_oauth2访问令牌?
- OmniAuth Strategies Facebook NoAuthorizationCodeError(必须传递`code`参数或签名请求(通过`signed_request`参数):
- 未初始化的常量User :: Authorization | omniauth
- Omniauth-facebook哈希没有显示Facebook’用户名’字段,使用rails 3
- Omniauth与FourSquare问题