我似乎无法为Mendeley的authenticated API调用找出OAuth身份验证(请注意,公共方法here有一个未维护的?gem)。
我在他们的门户网站上创建了一个应用程序,它返回应用程序使用者密钥和使用者密钥。我将它们放在一个YAML文件中,然后我可以在我的Ruby脚本中读取它。
cred = YAML.load_file("/home/cboettig/.mendeley_auth.yaml")
key = cred[:consumer_key]
secret = cred[:consumer_secret]
好像有nice example of authenticated call to the Mendeley API using the Faraday gem for authentication here。不幸的是,它似乎没有记录如何获得最后实际调用的令牌(或者它是哪个令牌?)。 (它指向github gistub生成令牌作为密钥的SHA1哈希值,但我找不到libary依赖项来使其工作,并且考虑到已经可用于处理OAuth的工具数量,它似乎过于复杂了。 。)据我所知,方法1:
## Method 1 -- how do I get the token?
key = cred[:key]
secret = cred[:secret]
token = ???? # How to get the token?
mendeley = Mendeley.new(token, secret) # Needs a token
profile = mendeley.get('/oapi/profiles/info/me') # example API call
关于这个主题Mendeley Custom OAuth Strategy存在一个现有的SO问题,我也无法成功地遵循这个问题。它表明这可以使用Omniauth
来处理,看起来这已经在omniauth-mendeley
gem中实现了。不幸的是,我无法做出the limited documentation的正面或反面,这表明这样的事情:
## Method 2 --
require 'omniauth-mendeley'
use OmniAuth::Builder do
provider :mendeley, ENV[key], ENV[secret]
end
好的,我可以获得密钥和秘密,但我的ruby-fu非常有限,我不理解上面的语法。如何执行此操作,然后对API进行函数调用(例如,对方法1尝试中显示的profile/me
的调用?尝试运行此操作只会出现错误
undefined method `use' for main:Object
获取这些方法的任何提示都可以使用吗?
答案 0 :(得分:0)
感谢您在shazino博客中提及我的文章。
OAuth主要用于网络 它需要在进行身份验证的两个网站之间进行舞蹈 这就是为什么你不会在网络外找到任何获得令牌的例子。
在我目前的使用中,我们有一个iOS应用程序检索令牌(我们为此开发了MendeleySDK。) 它将它提供给我们的服务器,因此我们可以代表用户进行一些API调用 这就是为什么我不需要做OAuth舞蹈。
你的方法2是要走的路。 OmniAuth::Builder
是rack middleware。它的语法适用于config.ru
文件。
尝试创建此文件并将示例2中演示的代码放在那里
然后,在终端中转到文件夹并输入rackup
您需要先安装机架宝石。
这应该使用您需要的中间件在端口9292上启动Web服务器
有关使用OmniAuth中间件的更多信息,请查看their wiki。