ruby - 在 ruby​​ 中获取 OAuth token (用于 Mendeley API)

标签 ruby api oauth mendeley

我似乎无法弄清楚调用 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/

相关文章:

ruby - 如何为 ruby​​ gem 可执行文件创建手册页?

javascript - 禁用 Google map Javascript 自定义控件上的拖动

python - 如果键相等,则按键和值排序

oauth - 在移动应用程序中使用 OAuth 2.0 授权代码流时,浏览器应该向移动应用程序返回授权代码或访问 token 吗?

ruby-on-rails - 如何在延迟作业队列中指定一名工作人员

ruby - 使用 byebug 调试时如何缩放堆栈?

ruby-on-rails - 保存失败时的 rails 回调

java - 用户之间的Paypal java API应用程序

iphone - OBJC_CLASS_$_MTSCRA”,引用自

java - 获取配置文件时出现 Google Analytics API 证书异常