我似乎无法弄清楚调用 Mendeley 的 authenticated API 的 OAuth 身份验证(请注意,公共(public)方法有一个未维护的 gem here )。
我在他们的门户网站上创建了一个应用程序,它返回一个应用程序消费者 key 和消费者 secret 。我将它们放入一个 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 .不幸的是,它似乎没有记录如何为最后的实际调用获取 token (或者它是哪个 token ?)。 (它指向一个关于将 token 生成为 key 的 SHA1 散列的 github 要点,但我找不到使它工作的库依赖项,而且考虑到已经可用于处理 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
尝试方法二
有一个关于此主题的现有 SO 问题,Mendeley Custom OAuth Strategy ,我也未能成功遵循。它表明这可以使用 Omniauth
来处理,看起来这已经在 omniauth-mendeley
gem 中实现了。不幸的是,我无法判断 the limited documentation 的正反面。 ,这表明是这样的:
## Method 2 --
require 'omniauth-mendeley'
use OmniAuth::Builder do
provider :mendeley, ENV[key], ENV[secret]
end
好的,我可以得到key和secret,但是我的ruby-fu非常有限,我不明白上面的语法。我如何执行它然后对 API 进行函数调用(例如方法 1 尝试中显示的对 profile/me
的调用?尝试运行它只会让我出错
undefined method `use' for main:Object
有任何让这些方法起作用的提示吗?
最佳答案
感谢您在 shazino 博客中提及我的文章。
OAuth 主要用于网络。
这需要两个网站之间进行身份验证。
这就是为什么您不会在网络之外找到任何示例来获取 token 。
在我目前的使用中,我们有一个 iOS 应用程序可以检索 token (我们为此开发了 MendeleySDK)。
它将它提供给我们的服务器,因此我们可以代表用户进行一些 API 调用。
这就是为什么我不需要做 OAuth 舞蹈。
您的方法 2 是可行的方法。 OmniAuth::Builder
是一个 rack middleware .它的语法适用于 config.ru
文件。
尝试创建此文件并将您在示例 2 中演示的代码放在那里。
然后,在您的终端中转到该文件的文件夹并键入 rackup
。
您需要先安装机架 gem。
这应该使用您需要的中间件在端口 9292 上启动 Web 服务器。
有关使用 OmniAuth 中间件的更多信息,请查看 their wiki .
关于ruby - 在 ruby 中获取 OAuth token (用于 Mendeley API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887366/