gpt4 book ai didi

ruby - 葡萄获取用户名 :password from BasicAuth

转载 作者:数据小太阳 更新时间:2023-10-29 08:08:15 24 4
gpt4 key购买 nike

我开始构建一个非常小的 API,我需要验证一些端点,而不是所有端点。我希望能够选择使用要在“路由”正文中调用的 authenticate! 方法来强制验证的端点。

例如:

resource :groups do
desc 'List all groups.'
get do
authenticate!
{ groups: "list of groups v1"}
end
end

我有这个工作。我使用了一个帮助程序,我使用以下方法从 header 手动获取 base64 编码数据:request.env["HTTP_AUTHORIZATION"]。如果用户和 secret 属于注册用户,我解码该数据并检查数据库。这工作正常,但我想使用 Grape 的助手来避免所有 base64 解码等:

http_basic do |username, password|
end

我的想法是在该方法中始终返回 true,将用户名和密码分配给@username 和@password,并有一个帮助程序获取这些变量并检查数据库。一切正常,问题是对于不需要身份验证的路由,因为“授权” header 为空,会出现要求输入密码的弹出窗口,我想避免这种情况。有没有办法使用助手来做我想做的事情??

顺便说一句:我正在使用安装在 rails-api 上的葡萄

谢谢!

最佳答案

好的,如果我没看错的话,您不希望出现用户名/密码框,而是在您的代码中决定您是否确实需要身份验证信息。

Grape 本身使用默认的 Rack::Auth::Basic 类。如果您创建此类的自定义版本,您应该能够在调用方法的开头进行断言,甚至可以将任何其他变量传递给您的 http_basic block 。

然后您可以通过以下方式将身份验证策略添加到 Grape:

# Add authorization strategy to grape and replace default http_basic
Grape::Middleware::Auth::Strategies.add(:http_basic, Your::Namespace::CustomizedBasicAuth, ->(options) { [options[:realm]] })

这样也无需在 @username@password 中保存凭据。您可以只包含或引用此身份验证策略中的逻辑。

尽管如此,我仍然更愿意将 API 分成两部分,正如 Eric 已经提到的那样。

关于ruby - 葡萄获取用户名 :password from BasicAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29152403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com