Rails:通过设计或其他方式进行身份验证以招摇 API



我的目标是登录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?替换为适合您需求的测试。

最新更新