【问题标题】:How to turn oauth_token & oauth_verifier into Access Token with OAuth gem如何使用 OAuth gem 将 oauth 令牌和 oauth 验证器转换为访问令牌
【发布时间】:2011-02-15 02:39:03
【问题描述】:

我正在尝试使用 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 的情况。谁能帮帮我?

【问题讨论】:

    标签: ruby-on-rails oauth evernote


    【解决方案1】:

    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 的一部分传递给您的应用程序。

    【讨论】:

    • 如何在回调中获取@request_token?您是将对象存储在会话中,还是以某种方式重新创建它?
    • 在我们的示例代码中,我们将它存储在会话中,但是您应该能够重新创建它,没有什么神奇的事情发生。实际的请求令牌(不是我命名为 request_token 的对象)将在回调 URL 中作为 oauth_token 查询字符串参数。
    • 任何人在访问存储在会话中的数据时遇到问题?我尝试为回调执行此操作,但在回调操作中出现 null
    • 是的,我遇到了同样的问题,因为令牌在添加到会话时实际上是一个字符串。我尝试在会话中存储令牌字符串和秘密并使用 OAuth::RequestToken.from_hash 重新创建,但到目前为止还没有运气。你搞定了吗?
    • 这里也一样。从 request_token 获取 null。你能帮助@Seth 吗?
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢您的回答。我想使用 OAuth gem,因为我不想生成 OauthConsumersController 和额外的东西,我已经有一个用于身份验证的模型,因为我正在使用 OmniAuth,我只想手动将 Evernote 访问令牌存储在现有模型中。
    【解决方案3】:

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

    Evernote OAuth in a unit test

    【讨论】:

      【解决方案4】:

      在通过 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

      【讨论】:

        猜你喜欢
        • 2020-04-21
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 2013-03-16
        • 2011-07-24
        相关资源
        最近更新 更多