我正在研究Viddler的API包装器,它最终将被公开,我正在尝试找出处理身份验证/ API密钥的最佳方法,特别是在Rails应用程序中的使用记住。
编写包装器的最简单方法是让代码每次都创建一个新客户端,开发人员可以将API密钥存储在一个常量中以备将来使用:
@client = Viddler::Client.new(VIDDLER_API_KEY)
问题在于,必须继续创建客户端对象并传入API密钥是一种笨重的方式。当您将用户身份验证投入混合时,这会变得更加复杂。
我正在考虑某种解决方案,其中我要在环境文件中设置所有API密钥,然后验证将在before_filter中完成。
Viddler::Client.api_key = 'abc123'
Viddler::Client.authenticate! 'username', 'password'
Viddler::Client
然后将其存储在类变量中,您可以在没有任何参数的情况下调用Viddler::Client.new
并进行经过身份验证的调用。我要关注的一件事是,这意味着开发人员必须确保在每个请求之前或之后清除身份验证,因为类变量会在请求之间保持不变。
有什么想法吗?
答案 0 :(得分:1)
全局存储API密钥肯定会非常有用,当然也是获取此类信息的方法。另一方面,我认为用户身份验证不应该全局存储,永远不会存储,特别是对于高级API,因为告诉用户“确保添加after_filter :reset_viddler_auth
”可能会导致一些意外的安全风险。 / p>
# 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密钥,
@client_other = Viddler::Client.new("username", "password", :api_key => "xyz890")
所以...只需2美分。
PS:不确定它是如何最新的,但已经有一个ruby viddler包装器,仅供参考,http://viddler.rubyforge.org/rdoc/