5

我正在尝试使用 OAuth gem 在我的 Ruby on Rails 应用程序中验证 Evernote。我正在使用验证 Twitter 的教程 - http://blog.brijeshshah.com/integrate-twitter-oauth-in-your-rails-application/因为我找不到 Evernote 的。

到目前为止,我已经让用户授权我的应用程序,现在有了临时凭据:

customer = OAuth::Consumer.new("xxx", "xxx",{
  :site=>"https://sandbox.evernote.com/",
  :request_token_path => "/oauth",
  :access_token_path => "/oauth",
  :authorize_path => "/OAuth.action"})
@request_token = customer.get_request_token(:oauth_callback => "http://localhost:3000/create_evernote_step_2")

session[:request_token] = @request_token.token
session[:request_token_secret] = @request_token.secret       

redirect_to @request_token.authorize_url

所以现在我有了 oauth_token 和 oauth_verifier,需要把它们变成访问令牌。Twitter 教程的这一部分似乎是特定于 Twitter 的,所以我现在确定如何处理 Evernote 的情况。谁能帮我吗?

4

4 回答 4

5

Evernote 的示例代码现在包含一个使用 OAuth gem 的 Ruby OAuth 示例。您可以从http://www.evernote.com/about/developer/api/下载示例代码。在这种情况下,下一步是将临时凭证交换为令牌凭证:

access_token = @request_token.get_access_token(:oauth_verifier => oauth_verifier)

oauth_verifier 作为回调 URL 的一部分传递给您的应用程序。

于 2011-03-08T15:49:23.220 回答
0

嘿,伙计,我也开始了这样的道路,我将 Oauth 集成到我的其他应用程序中。

您应该查看github 上的 oauth-plugin,因为它会为您处理所有这些业务。

它应该对你有很大的帮助,另外,如果有一个“奇怪”的 oauth 提供程序不是“流行的”,它允许你将它添加到配置文件中。这就是我对我所做的。

一个建议是覆盖 OauthConsumersController 中的所有方法并根据需要“调整”它们。我知道我必须这样做,而且,更容易看到他用他的插件做了什么并从那里调整它。见鬼,也许他甚至有一条你可以在他的代码中为你的确切问题遵循的路径,你不需要他的所有插件(因为他也使用 oauth gem)。

于 2011-02-15T03:18:10.557 回答
0

除了来自 Evernote 的有用示例之外,您可能还希望在单元测试中自动化“重定向用户、让他们授予访问权限、被重定向回”循环。我发现这有点挑战性,所以在这里发布了所有这样做的代码:

单元测试中的 Evernote OAuth

于 2012-12-13T19:03:24.383 回答
0

通过 Seth's Answer 获取 accesstoken 时,您需要生成授权 url 时创建的请求令牌。这需要存储在会话对象中。如果直接存储,在检索存储的请求令牌时会抛出错误。因此,您需要将其存储在 cache_store 中。

为了在您的 Rails 应用程序中处理 evernote api 的请求令牌和访问令牌,您可以按照以下步骤操作:

你需要设置一个会话 cache_store 来从 Evernote 保存你的 OAuth 令牌。将以下内容添加到 config/initializers/session_store.rb 的末尾:

Rails.application.config.session_store :cache_store, key: ‘_rails-evernote_session’

这样,您可以将对象存储在会话中,并在需要时检索它。

有关更多详细信息,您可以查看以下教程。- https://codepen.io/asommer70/post/export-evernote-notes-with-rails

于 2016-05-14T12:31:50.697 回答