OmniAuth 不适用于 Rails3 中的路由通配

2023-11-27

我正在尝试遵循 Railscast 241简单的 OmniAuth除非我在末尾有路由通配,否则它工作得很好/config/routes.rb:

match '*uri' => "posts#index"

如果我要求/auth/twitter使用 globbing 那么 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?


OmniAuth 流程是提供以下功能时/auth/:provider网址称为:

  1. 将请求传递给底层 Rack/Rails 应用程序,就好像 OmniAuth 不存在一样;
  2. 判断底层应用是否生成了404;
  3. 如果是,则调用实际的 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

确定全局路由中的 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", :status => 404, :layout => false
    end
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OmniAuth 不适用于 Rails3 中的路由通配 的相关文章

  • 列“users.id”必须出现在 GROUP BY 子句中或在聚合函数中使用

    关系 Item belongs to Product Product belongs to User 项目型号范围 scope search gt search term select products name users product
  • Rails 2.3.14:如何序列化 ActionController::Request 对象?

    我需要编写一些根据 Rails 2 3 14 控制器收到的请求对象类型执行操作的方法 但是 我不想启动整个应用程序 甚至不想启动控制器 我只想拥有这样一个对象的编组副本 以便我可以在 Rails 环境之外使用 不幸的是 ActionCont
  • Rails 中的 ActionController::RoutingError (没有路由匹配 [GET] "/favicon.ico")

    我尝试过使用 还有这个 但我仍然在日志文件中看到此错误 ActionController RoutingError No route matches GET favicon ico favicon ico 位于 public 文件夹中 我也
  • Rails 4 - 如何在开发中使用 sqlite3 以及在生产中使用 PostgreSQL 和 Heroku

    我正在尝试部署到 Heroku 但不能 因为默认的 sqlite3 服务器仍然存在 检测到 Heroku 不支持 sqlite3 gem https devcenter heroku com articles sqlite3 https d
  • 如何在 Rails 3 中查看用户的实时活动?

    我想做的是让我的管理员用户能够实时 通过一些 AJAX jQuery 功能 看到我的用户正在做什么 我该如何去做呢 我认为它与会话活动有关 并且我已经开始将会话保存到数据库 而不是 cookie 但一般来说 我如何获取该信息并实时解析它 我
  • 限制 has_many 关联中的对象数量

    我有一个相册 里面有很多照片 counter cache 设置会更新相册表中的 photos count 列 如何限制相册的照片数量 就我而言 使用就足够了validates length of class Album has many p
  • 如何最好地将地址关联到 Rails 中的多个模型?

    这个问题 https stackoverflow com questions 648463 best way to model customer addresson SO 似乎与我的问题有关 但我不确定我的问题是否得到了回答 一个地址可以属
  • 如何在控制器中获取f.submit的名称参数?

    我创建了 form html erb 其中的编码如下 是的 我确实有两个相同表单的提交 并且它们都有 更新 和 销毁 等名称 当用户按下销毁按钮时 books controller 中的更新操作将被调用 并判断是 更新 还是 销
  • 如何让 Sublime Text 2 与 Ruby on Rails 配合使用?

    我是 Ruby on Rails 的新手 这是我到目前为止所做的 我已经安装了 XCode Homebrew RVM Ruby 和 Rails 现在如何让 Sublime Text 2 与 Ruby on Rails 一起使用 你应该做的第
  • 使用 Ruby on Rails 索引多列

    我在 Mysql 数据库中有一个表 我想在其上使用多列索引 如何在不使用 mysql 控制台的情况下在 Rails 中执行此操作 在迁移定义中 您可以这样做 add index table name column1 column2
  • 如何将 CarrierWave 文件迁移到新的存储机制?

    我有一个 Ruby on Rails 站点 其中包含使用 CarrierWave 进行文件处理的模型 当前使用本地存储 我想开始使用云存储 并且需要将现有的本地文件迁移到云端 我想知道是否有人可以指出这样做的方法 使用模型属性的好处是 它允
  • 如何通过Grape API获取路由

    我使用 gem grape 作为 api 我尝试通过命令获取 api urlrake grape routes namespace grape do desc routes task routes gt environment do API
  • 载波无法删除图像

    我现在使用 Carrierwave 上传图像 一切都很好 除了一个 当我添加用于删除上传图像的复选框时 我收到错误 无法批量分配受保护的属性 remove image Form Model class Manufacturer lt Act
  • Rails ActiveRecord:是否可以组合 :include 和 :conditions 查询?

    想象一下我有 wiki 文章 有很多修订 我想通过数据库使用 ActiveRecord 进行查询 该查询仅返回那些在过去 24 小时内更新过修订的文章 这样的事可能吗 我想它会是这样的 Articles find all include g
  • 动态分配背景图片scss/sass

    我想要做的是有一个表单 您可以在其中上传图片 然后当您查看该对象时 图片会在特定 div 中居中 垂直和水平向上倾斜 其大小未知等 除非有办法使用 image tag 帮助器将其垂直居中 否则我希望能够使用该图像作为背景图像 在我的 css
  • 未签出...捆绑安装无法修复帮助!

    https github com intridea omniauth git at master is not checked out Please run bundle install Bundler GitError 那我该怎么办 捆绑
  • MVC Ajax.ActionLink 找不到 POST 方法

    我在控制器中声明了一个 POST 方法 AcceptVerbs HttpVerbs Post public ActionResult UpdateComments int id string comments 在我看来 还有一个 Actio
  • 为什么这条路线不匹配

    我在获取匹配路线时遇到一些问题 我使用 base 32 编码的 int 作为 Web 应用程序中幻灯片的短链接 每个幻灯片有 5 个不同的版本 我使用首字母来区分每个版本 路由始终匹配 除非 Base 32 编码 int 的第一个字符与指定
  • 我可以从安装 Rails 引擎的真实应用程序运行它的规格吗?

    我有一个 Rails 引擎 旨在为我们的一个更大的项目提供一些模型和控制器 引擎有一套相当不错的规格 在引擎的虚拟应用程序中使用了一堆模拟和一些全尺寸模型和控制器 以确保引擎正在做它应该做的事情并与更大的应用程序一起工作 然而 即使所有测试
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g

随机推荐

  • Python 中的 Hopcroft–Karp 算法

    我正在努力实施霍普克罗夫特卡普算法在Python中使用networkx作为图形表示 目前我到目前为止 Algorithms for bipartite graphs import networkx as nx import collecti
  • 每个 JavaScript 程序员应该知道什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • phpexcel下载

    你好 我是 phpexcel 的新手 我想知道是否有某种方法将我创建的 Excel 发送给客户端下载而不将其保存在我的服务器上或在他下载后立即将其删除 我正在尝试在页面上创建一个 导出按钮 该按钮将为用户提供一个 弹出窗口 其中包含他想要我
  • 如何在 SublimeText 中使用自定义字体

    我知道用户可以通过以下方式更改首选项中的 font face font face gohufont 11 font size 11 但是 每次我尝试添加 已安装的 非系统字体 例如Gohufont上面 它不起作用 安装TTF尽管有特定于平台
  • 如何从 qmake 获取 Makefile

    给定一个 x pro 文件 我如何生成 makefile 运行 qmake x pro 会生成一个没有 Makefile 的 x pbproj 目录 Thanks 编辑 添加信息 关于 pro 文件和平台 我在 Mac OS X 10 6
  • React (JSX) 中的子级与父级通信无需流量

    我对 React 还很陌生 我正在绞尽脑汁地试图解决一个在我看来很简单的问题 这是我构建的组件的图片 颜色选择组件 我想要完成的事情似乎微不足道 但实际上我读过的每一篇解释要做什么的文章都告诉我一些不同的东西 而且没有一个解决方案有效 它分
  • 按引用调用和按值调用之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 值参数和参考参数之间的区别 按引用调用和按值调用有什么区别 在 C 中 没有引用调用 您能得到的最接近的是获取一个地址 并传递该地址的副本 按值 见下文 在 C 中 按引用调用传递对对象的引用 原始对
  • 什么是 lambda 表达式?何时应该使用它?

    C 11 中的 lambda 表达式是什么 我什么时候会使用一个 他们解决了哪类在引入之前无法解决的问题 一些示例和用例会很有用 问题 C 包含有用的通用函数 例如std for each and std transform 这非常方便 不
  • C# 中的 XML 序列化和 DefaultValue("") 相关问题

    我的类属性具有将被序列化的默认值 public class DeclaredValue XmlElement ElementName Amount DataType double IsNullable false DefaultValue
  • 在R中显示UTF-8编码的汉字

    我尝试在 R 中打开包含 繁体 中文字符的 UTF 8 编码的 csv 文件 出于某种原因 R 有时将信息显示为中文字符 有时显示为 unicode 字符 例如 data lt read csv mydata csv encoding UT
  • 触发 Jenkins 基于新标签和提交构建

    我们正在使用 Git 插件 https wiki jenkins ci org display JENKINS Git Plugin 目前 只要将更改推送到 GitHub 我们就会通过 Webhooks 启动 Jenkins 构建 现在我们
  • 使用express.js进行路由-无法获取错误

    与 一起工作express js第一次 我坚持添加我的第一条路线 我的路线定义在app js像这样 app get user id photos function req res res send user req params id 然而
  • 阻止页面加载时触发 CSS 转换

    我遇到了 CSS 问题transition页面加载时触发属性 问题是当我应用color transition到一个元素 例如 transition color 2s 然后 当页面首次加载时 我的元素会从黑色闪烁到它自己指定的颜色 假设我有以
  • 如何在我的 Google Apps 脚本/Google 表格 HTML 中包含脚本?

    我无法让基于 Apps 脚本的 HTML 包含任何脚本 My doGet函数为HtmlService工作正常 function doGet return HtmlService createHtmlOutputFromFile myhtml
  • pylons mako如何检查变量是否存在

    在django中 我们可以这样做 views py def A request context test test return render to response index html context context instance
  • 为什么是这样:需要通过才能继续处理? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 有人可以解释为什么else pass为了完成其余代码
  • 在对象初始值设定项中分配事件

    为什么不能在 C 中的对象初始值设定项中将事件与属性一起分配 这样做似乎是那么自然 var myObject new MyClass Property value Event1 actor or Event2 actor 还是有什么我不知道
  • 如何强制客户端刷新 JavaScript 文件?

    We are currently working in a private beta and so are still in the process of making fairly rapid changes although obvio
  • 最少登录插入

    我有一个INSERT该语句占用了大量日志空间 以至于在该语句完成之前硬盘驱动器实际上已被填满 问题是 我really不需要记录它 因为它只是中间数据上传步骤 为了论证的缘故 假设我有 表 A 初始上传表 使用填充bcp 所以没有日志记录问题
  • OmniAuth 不适用于 Rails3 中的路由通配

    我正在尝试遵循 Railscast 241简单的 OmniAuth除非我在末尾有路由通配 否则它工作得很好 config routes rb match uri gt posts index 如果我要求 auth twitter使用 glo