我的目标是登录Swagger API以访问端点。将来使用身份验证令牌。
我试图将设计行放在应用程序控制器中:
before_action :authenticate_user!
但是当加载 http://localhost:3000/api-docs/index.html 时 - 系统允许在没有身份验证的情况下访问 API。
我试图在/config/initializers/rswag-ui.rb 中取消注释:
c.basic_auth_enabled = true
c.basic_auth_credentials 'username', 'password'
但事实并非如此。
此外,它也没有从官方 Swagger.io 文档中找到实现持有者身份验证的正确方法。我不知道它是否连接到 Devise,我是否需要使用它。
哪种方式可以通过我的用户的登录名和密码登录API? 谢谢。
使用 rswag-ui,您只需要取消注释这些行。不需要其他身份验证(如设计(。
# /config/initializers/rswag-ui.rb
c.basic_auth_enabled = true
c.basic_auth_credentials 'username', 'password'
我只是在我的项目中做了它,它立即起作用,所以我想我不妨回答一下。
如果您使用的是 devise,为了保护招摇点,您可以在config/routes.rb
中使用authorize
方法
authenticate :user do
mount Rswag::Ui::Engine => '/api-docs'
mount Rswag::Api::Engine => '/api-docs'
end
方法文档
如果您的 API 端点受设计 Cookie 会话的保护,则仅在成功登录后发出请求就足够了。但是,如果您的 API 使用其他身份验证方案(例如令牌(,则需要在spec/swagger_helper.rb
中指定安全方案。
在这里,您可以找到有关此配置的更多详细信息。
扩展@mateusc的答案
如果您不仅希望将访问权限限制为 Devise 注册用户,还希望限制对这些用户的子集(例如,仅管理员(,则可以在routes.rb
中执行以下操作
authenticate :user, lambda { |u| u.admin? } do
mount Rswag::Ui::Engine => '/api-docs'
mount Rswag::Api::Engine => '/api-docs'
end
将u.admin?
替换为适合您需求的测试。