问题标签 [rack-middleware]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - [Facebook][Canvas] 提取原始请求方法
精简版
是否有可能从POST
Facebook 对我的 Web 应用程序执行的请求中获取原始请求方法?
长版
我想让我当前的 Web 应用程序 Facebook 画布框架在最低级别兼容。
关于 Facebook 画布
Facebook 上的应用程序是加载到 Canvas 框架中的网页。当用户在 Facebook 上加载您的 Canvas 应用程序时,我们会在该页面的 iframe 中加载 Canvas URL。这会导致您的应用程序显示在标准 Facebook chrome 中。
我是一名Ruby程序员,Rack Middleware似乎是解决这个问题的合理方法。
关于机架
Rack 在支持 Ruby 和 Ruby 框架的网络服务器之间提供了一个最小接口。
关于机架中间件
在服务器和框架之间,Rack 可以使用中间件根据您的应用程序需求进行定制
每个中间件都会用一个对象初始化,env
这个对象是某种Hash。它包含REQUEST_METHOD
代表 HTTP 请求方法的键。
Facebook 将所有请求方法转换为POST
. 为了让我的应用程序在 Facebook Canvas 上下文中工作,我必须POST
向我的应用程序添加一个额外的路由。
相反,我想将其重写为env['REQUEST_METHOD']
原始请求方法。
在研究期间,我发现了一个名为rack-facebook的宝石。
这颗宝石正在做我想要的。它从参数中提取['fb_sig']['request_method']
并将其分配给env['REQUEST_METHOD']
.
可悲的是,我还在 facebook 开发博客上找到了一个博客条目
所有 Canvas 应用程序必须处理 signed_request(fb_sig 将被删除)
2011 年 5 月 10 日晚上 8 点 25 分
关于 Facebook 签名请求
对于某些类型的应用程序,即使在请求权限之前,也会将签名请求传递给包含一些附加信息字段的应用程序。
我查看了 Facebook 开发人员文档,发现请求方法或类似的东西不再是signed_request
参数的一部分。
是否有可能从POST
Facebook 对我的 Web 应用程序执行的请求中获取原始请求方法?
ruby-on-rails - 更改机架中间件中的 response.body
我正在尝试为 Rails 4.2 应用程序编写一些机架中间件,该应用程序使用该gsub
方法更改响应主体。我发现使用这样的模式的旧示例:
我发现没有用于response.body
. 我可以从另一种模式开始修改身体吗?
ruby - 如何将 Rack 中间件注入现有的 Rack 应用程序?
给定一个不是 Rails 的 Rack 应用程序,
builder.rb:
如何使用 spec_helper 注入测试中间件?
ruby-on-rails - 在中间件中运行的线程正在使用旧版本的父实例变量
我已经使用Heroku 教程来实现 websockets。
它适用于 Thin,但不适用于 Unicorn 和 Puma。
还实现了一个回显消息,它响应客户端的消息。它在每台服务器上都能正常工作,因此 websockets 实现没有问题。
Redis 设置也是正确的(它捕获所有消息,并执行subscribe
块内的代码)。
它现在是如何工作的:
在服务器启动时,初始化一个空@clients
数组。然后启动新线程,它正在侦听 Redis,并打算将该消息从 @clients 数组发送给相应的用户。
在页面加载时,会创建新的 websocket 连接,它存储在 @clients 数组中。
如果我们从浏览器收到消息,我们会将其发送回与同一用户连接的所有客户端(该部分在 Thin 和 Puma 上都正常工作)。
如果我们收到来自 Redis 的消息,我们还会查找存储在 @clients 数组中的所有用户连接。这就是奇怪的事情发生的地方:
如果使用 Thin 运行,它会在 @clients 数组中找到连接并将消息发送给它们。
如果使用 Puma/Unicorn 运行,@clients 数组始终为空,即使我们按该顺序尝试(无需重新加载页面或其他任何操作):
- 从浏览器发送消息 ->
@clients.length
为 1,消息已传递 - 通过 Redis 发送消息 ->
@clients.length
为 0,消息丢失 - 从浏览器发送消息 ->
@clients.length
仍然为 1,消息已传递
- 从浏览器发送消息 ->
有人可以澄清一下我错过了什么吗?
Puma服务器相关配置:
相关中间件代码:
ruby-on-rails - 在 Rails4.1 中放置 Rack 中间件的位置
我查看了一些答案 1] 包含在 qoutes 中,2] 不要使用 require 等,但它们都不起作用。Rails4 中的解决方案可能发生了变化
我正在尝试按照此处的教程https://devcenter.heroku.com/articles/ruby-websockets#using-with-rails
它说将现有的 ChatBackend 中间件复制到您的 Rails 项目中的 app/middleware/chat_backend.rb。然后将中间件插入到您的堆栈中,在 config/application.rb 中定义:
我在 app/middlewares/chat_backend.rb 中定义了中间件,如下所示:
这是应用程序.rb
我究竟如何添加中间件。欣赏任何确切的代码示例。
ruby-on-rails - 使用 Flash 消息功能构建机架中间件响应
我有一个安装在 Rails 应用程序下的 Sinatra 应用程序/admin
。Sinatra 应用程序是一个管理仪表板,因此应该只对授权用户可用。
为了强制执行,我构建了一个 Rack Middleware,它将在调用 Sinatra 应用程序之前运行。
逻辑很简单——
- 如果用户通过身份验证,则照常继续
- 如果用户未通过身份验证,请使用 flash 警报消息重定向到根路径(我正在使用rack-flash gem 来允许访问 Rack 中的 flash 消息)
代码如下。我觉得我在redirect
方法中遗漏了一些东西。该Rack::Builder
块构造了一个迷你机架应用程序,内部块进一步创建另一个机架应用程序(Proc),该应用程序使用闪存消息构建重定向响应。
当我运行它时,我得到undefined method 'detect' for nil:NilClass
,这表明两个块都没有返回有效的非nil
响应。我需要call
在这些块之一上的某个地方运行吗?
如果有帮助,我正在使用 Puma Webserver。
谢谢!
ruby-on-rails - 如何在机架级别阻止请求?
在运行 Rails4 应用程序时,我经常看到机器人在探查我是否在运行 Wordpress 站点。我希望他们希望创建评论垃圾邮件或寻找 Wordpress 安全漏洞。
这是日志中的示例错误:
什么是 Rack 中间件的简单示例,我可以在其中阻止此 http 请求?我将如何命名该文件以及它在 Rails 应用程序中的位置?
谢谢!
ruby-on-rails - 如何在 Rails 4.2 应用程序中添加中间件
我正在尝试学习Middlewares
并一直在练习如何在 Rails 应用程序中安装它。我关注了railscast
到目前为止,我已经实施了这些步骤:
1)创建了一个Rails 4.2
名为:博客的新应用程序
2) 在lib
文件夹中添加了一个名为response_timer.rb
.
3) 添加config.middleware.use "ResponseTimer"
在application.rb
.
但是当我rake middleware
在终端中点击命令时,它报告了这个错误:
我也尝试添加config.middleware.use "ResponseTimer"
,development.rb
但再次面临同样的错误。
我在这里想念什么?
请帮忙。
参考文章: http: //guides.rubyonrails.org/rails_on_rack.html
ruby-on-rails - 如何在引擎中使用引擎中的中间件
由于不同的 gem 在我的系统中如何交互,我在 rails 应用程序上安装了一个引擎。我最近开始研究一个提供一些中间件功能的新 gem。
有点像这样:
但是,我似乎无法让 NewMiddlewareEngine 出现在中间件中。我已经测试过安装这个:
和:
两者都可以正常工作。问题是当我尝试“通过”引擎安装 NewMiddlewareEngine 时。
有谁知道如何配置这样的东西?
这是 MyMiddlewareEngine 安装:
ruby-on-rails - rack-attack 不会将任何 ip 列入黑名单
这是我第一次与rack-attack交互,所以请随时指出我在代码中可能存在的任何错误。我正在尝试将那些ip
试图访问路由的人列入黑名单,"/azenv.php", "/setup.php" etc..
因为这些人不断地使用一些随机.php
url 并可能试图关闭服务器,我认为开始阻止它们可能是一个好主意,但显然机架-攻击不会阻止任何ip
尝试访问上述 url 的行为。
我试图运行的代码块是:
很少有块来自他们的 wiki 本身。如果这里有任何问题,请更正。
更新
这是我在给定示例中尝试的一段代码: