3

我似乎无法弄清楚对 Mendeley 的经过身份验证的 API的调用的 OAuth 身份验证(请注意,这里有一个未维护的公共方法的宝石

我在他们的门户网站上创建了一个应用程序,它返回一个应用程序使用者密钥和使用者密码。我将它们弹出到一个 YAML 文件中,然后我可以在我的 Ruby 脚本中读取该文件。

  cred = YAML.load_file("/home/cboettig/.mendeley_auth.yaml")
  key = cred[:consumer_key] 
  secret = cred[:consumer_secret]

尝试方法一

似乎有一个使用 Faraday gem 进行身份验证的 Mendeley API 的身份验证调用示例。不幸的是,它似乎没有记录如何在最后的实际调用中获取令牌(或者它是哪个令牌?)。(它指向一个 github gist,将令牌生成为密钥的 SHA1 哈希,但我找不到使该工作正常的库依赖项,而且鉴于已经可用于处理 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-mendeleygem 中实现了。不幸的是,我无法对有限的文档做出正面或反面,这暗示了这样的事情:

 ## Method 2 -- 
 require 'omniauth-mendeley'
  use OmniAuth::Builder do
    provider :mendeley, ENV[key], ENV[secret]
  end

好的,我可以得到密钥和秘密,但是我的 ruby​​-fu 非常有限,我不明白上面的语法。如何执行此操作,然后对 API 进行函数调用(例如profile/me方法 1 尝试中显示的调用?尝试运行它只会让我出错

 undefined method `use' for main:Object

使这些方法中的任何一种起作用的任何提示?

4

1 回答 1

0

感谢您在 shazino 博客中提及我的文章。

OAuth 主要用于网络。
它需要在两个网站之间进行身份验证。
这就是为什么您在网络之外找不到任何示例来获取令牌的原因。

在我目前的使用中,我们有一个 iOS 应用程序来检索令牌(我们为此开发了MendeleySDK)。
它将它提供给我们的服务器,因此我们可以代表用户进行一些 API 调用。
这就是为什么我不需要做 OAuth 舞蹈。

你的方法2是要走的路。OmniAuth::Builder是一个机架中间件。它的语法是为了在config.ru文件中使用。

尝试创建此文件并将您在示例 2 中演示的代码放在那里。
然后,在您的终端中转到文件的文件夹并键入rackup.
您需要先安装 rack gem。
这应该使用您需要的中间件在端口 9292 上启动一个 Web 服务器。
有关使用 OmniAuth 中间件的更多信息,请查看他们的 wiki

于 2013-04-16T09:37:46.850 回答