我有一组API文档页面,我想使用设计密码保护。使用rspec_api_documentation生成文档。 gem使用rspec来执行API方法并创建html或json doc文件。我正在生成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"
https://github.com/zipmark/rspec_api_documentation
https://github.com/modeset/apitome
我发现这个操作方法应该会使网站上的每个页面都需要验证,但我仍然可以在不登录的情况下点击文档网址。
#https://github.com/plataformatec/devise/wiki/How-To:-Require-authentication-for-all-pages
感谢您的帮助。
答案 0 :(得分:5)
您可以控制Apitome控制器并请求身份验证。
控制器实现将如下:
class ApidocsController < Apitome::DocsController
before_filter :authenticate_user!
end
答案 1 :(得分:1)
如果您已配置Devise(例如,如果您已使用ActiveAdmin),则可以共享同一个经过身份验证的会话。
您必须禁用Apitome的默认安装:
# config/initializers/apitome.rb
Apitome.setup do |config|
config.mount_at = nil
# ...
end
由于这会破坏Apitome中的链接,您必须添加到您的application.rb:
# config/application.rb
# ...
class Application < Rails::Application
config.after_initialize do
Apitome.configuration.mount_at = '/docs'
end
# ...
end
然后在Devise认证会话下强制安装Apitome引擎:
# config/routes.rb
Rails.application.routes.draw do
# ...
authenticated :admin_user do
mount Apitome::Engine => '/docs'
end
# root_to ...
end
现在,只有经过身份验证的用户才能访问/ docs。
PS:将:admin_user(Active Admin的默认值)替换为:user或配置了Devise的任何其他型号名称。
答案 2 :(得分:0)
我正在使用降低的Rails API,因此没有任何视图或设计,因此没有简单的方法来实现密码保护。因此,我寻求以下解决方案。
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部门中。