我试图遵循Railscast 241
Simple OmniAuth并且它工作正常,除非我在/config/routes.rb结尾处有Route Globbing:
match '*uri' => "posts#index"
如果我使用globbing请求/ auth / twitter,那么OmniAuth什么都不做:
Started GET "/auth/twitter" for 127.0.0.1 at 2011-04-03 19:17:44 +0200 Processing by PostsController#index as HTML Parameters: {"uri"=>"auth/twitter"} Rendered posts/index.html.haml within layouts/application (9.0ms) Completed 200 OK in 103ms (Views: 14.6ms | ActiveRecord: 0.7ms)
没有通配路线,它可以正确验证.
有没有办法让路线全球化和OmniAuth?
解决方法
The OmniAuth process将在调用/ auth /:提供程序URL时提供以下功能:
>将请求传递给底层的Rack / Rails应用程序,就好像OmniAuth不在那里一样;
>确定底层应用程序是否生成404;
>如果是,请调用实际的OmniAuth功能.
由于你基本上使用你的路由通配符匹配所有内容,你的应用程序永远不会给404,OmniAuth无法完成它的工作.我看到两个直接的选择.
手动将OmniAuth路由与404匹配
添加新路线如下:
match '/auth/:provider' => 'omniauth#passthru'
然后创建一个生成404的控制器和操作:
class OmniauthController < ApplicationController def passthru render :file => "#{Rails.root}/public/404.html",:status => 404,:layout => false end end
确定Glob Route中的404状态
我假设您的glob路线将以某种方式搜索与URL匹配的帖子;你可以抓住失误(例如,当PostsController #index无法找到帖子时)并生成404.
class PostsController < ApplicationController def index if @posts = Post.find_by_current_url_or_whatever render 'index' else render :file => "#{Rails.root}/public/404.html",:layout => false end end end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。