Ruby on rails 如何在没有控制器的情况下保护rspec_api_文档apitome路由

Ruby on rails 如何在没有控制器的情况下保护rspec_api_文档apitome路由,ruby-on-rails,rspec,devise,Ruby On Rails,Rspec,Devise,我有一组API文档页面,我想使用Desive对其进行密码保护。这些文档是使用rspec_api_文档生成的。gem使用rspec执行API方法并创建html或json文档文件。我正在生成json并使用另一个gem apitome作为查看器 这一切都运行得很好,我的api文档可以在/api/docs上找到,但我不知道如何要求身份验证来查看文档 文档是通过apitome查看的,因此它使用rails。routes.rb中没有路由,但apitom初始值设定项装载文档 来自apitom初始值设定项: #

我有一组API文档页面,我想使用Desive对其进行密码保护。这些文档是使用rspec_api_文档生成的。gem使用rspec执行API方法并创建html或json文档文件。我正在生成json并使用另一个gem apitome作为查看器

这一切都运行得很好,我的api文档可以在/api/docs上找到,但我不知道如何要求身份验证来查看文档

文档是通过apitome查看的,因此它使用rails。routes.rb中没有路由,但apitom初始值设定项装载文档

来自apitom初始值设定项:

# This determines where the Apitome routes will be mounted. Changing this to "/api/documentation" for instance would
# allow you to browse to http://localhost:3000/api/documentation to see your api documentation. Set to nil and mount
# it yourself if you need to.
config.mount_at = "/api/docs"

我发现这个方法应该使站点上的每个页面都需要授权,但我仍然能够在不登录的情况下点击文档url

#https://github.com/plataformatec/devise/wiki/How-To:-Require-authentication-for-all-pages

感谢您的帮助。

您可以控制Apitome控制器并请求帮助

  • 通过将mount_at设置为nil,将apitome配置为不装载自身
  • 编写控制器ApidocsController扩展Apitome::DocsController
  • 添加前\u筛选器:验证\u用户!在控制器中
  • 将路由添加到控制器:获取“/api/docs”到:“apidocs#index”
控制器实现如下所示:

class ApidocsController < Apitome::DocsController
    before_filter :authenticate_user!
end
class ApidocsController
如果您已经配置了Desive(例如,如果您已经使用ActiveAdmin),您可以共享同一个经过身份验证的会话

您必须禁用Apitome的默认安装:

# config/initializers/apitome.rb
Apitome.setup do |config|
  config.mount_at = nil
  # ...
end
由于这将断开Apitome中的链接,因此您必须添加到应用程序中。rb:

# config/application.rb
# ...
class Application < Rails::Application
  config.after_initialize do
    Apitome.configuration.mount_at = '/docs'
  end 
  # ...
end
现在,只有已通过身份验证的用户才能访问/docs


PS:replace:admin\u user(Active admin的默认值)to:user或配置了designe的任何其他型号名称。

我使用的是简化的rails api,因此没有任何视图或designe,因此没有实现密码保护的简单方法。因此,我采取了以下解决方案

Apitome.setup do |config|
  config.mount_at = nil
  # ...
end
在routes.rb文件中:

mount Apitome::Engine => '/api/docs' unless Rails.env.production?

最后,我只是做了一个api/docs页面的pdf,然后将pdf发送给任何有权查看文档的人。显然不适合大用户群,但适合小用户群,例如在公司的IT团队中。

Hmm,有些地方不太好。。。文档页面中生成的“模拟响应”URI位于
/simulate/*路径中,而我希望它们是
/api/docs/simulate/..
。不确定是否有解决方案……这是一个记录在案的问题。检查apitome的这个问题以及建议的解决方案:谢谢@jogaco,你会注意到我是最后一个对GitHub线程发表评论的人,解释了为什么这仍然是一个问题。:)为了让它工作,我必须在
config/routes.rb
的底部添加
mount Apitome::Engine=>“apidocs#index”
mount Apitome::Engine => '/api/docs' unless Rails.env.production?