gpt4 book ai didi

ruby-on-rails - 如何处理 Ruby API 包装器的身份验证?

转载 作者:太空宇宙 更新时间:2023-11-03 16:38:56 24 4
gpt4 key购买 nike

我正在为 Viddler 开发 API 包装器,最终将公开,我正在尝试找出处理身份验证/API key 的最佳方法,特别是考虑到 Rails 应用程序中的使用情况。

编写包装器的最简单方法是让代码每次都创建一个新客户端,开发人员可以将 API key 存储在常量中以备将来使用:

@client = Viddler::Client.new(VIDDLER_API_KEY)

问题在于,必须不断创建客户端对象并传入 API key 有点笨拙。当您将用户身份验证加入其中时,这会变得更加复杂。

我正在考虑某种解决方案,我在环境文件中设置所有 API key ,然后在 before_filter 中完成身份验证。

Viddler::Client.api_key = 'abc123'
Viddler::Client.authenticate! 'username', 'password'

Viddler::Client 然后会将其存储在一个类变量中,您可以调用 Viddler::Client.new 而不带任何参数并进行经过身份验证的调用。我担心的一件事是,这意味着开发人员必须确保在每次请求之前或之后清除身份验证,因为类变量会在请求之间持续存在。

有什么想法吗?

最佳答案

在全局范围内存储 API key 肯定会非常有用,而且肯定是获取此类信息的方式。另一方面,我认为用户身份验证不应该全局存储,永远不要存储,尤其是对于高级 API,因为告诉您的用户“确保添加 after_filter :reset_viddler_auth”可能会导致一些意外的安全风险。

# in a config/initializer/*.rb file or something
Viddler::Client.api_key = "abc123"

# in the controller/action/model/wherever
@client = Viddler::Client.new # anonymous
@client.authenticate!("username", "password") # authenticate anon client

@client_auth = Viddler::Client.new("username", "password") # authenticated client

猜猜你已经两全其美了 :) 甚至可以提供一种使用另一个 API key 创建新客户端的方法,例如,

@client_other = Viddler::Client.new("username", "password", :api_key => "xyz890")

所以...只是我的 2 美分。

PS:不确定它有多新,但已经有一个 ruby​​ viddler 包装器,仅供引用,http://viddler.rubyforge.org/rdoc/

关于ruby-on-rails - 如何处理 Ruby API 包装器的身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3234335/

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