2011-02-15 46 views
5

我正尝试使用OAuth gem在我的Ruby on Rails应用程序中对Evernote进行身份验证。我正在使用教程来验证Twitter - http://blog.brijeshshah.com/integrate-twitter-oauth-in-your-rails-application/,因为我找不到Evernote。如何使用OAuth将oauth_token&oauth_verifier转换为Access令牌gem

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

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中处理。谁能帮我吗?

回答

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的一部分。

+1

如何在回调中获得@request_token?你在会话中存储对象,还是以某种方式重新创建对象? – alltom 2012-01-24 15:02:07

0

嘿,我开始走这样的路,我在那里集成Oauth到我的其他应用程序之一。

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

它应该可以帮助你大部分的方式,再加上如果有一个'怪异'的oauth提供者不是“流行”的,它允许你将它添加到配置文件中。这就是我对我的做法。

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

+0

感谢您的回答。我想使用OAuth gem,因为我不想生成OauthConsumersController和额外的东西,因为我使用OmniAuth,并且我只想手动将Evernote Access令牌手动存储在现有模型中,所以我已经有一个用于身份验证的模型。 – ben 2011-02-15 06:37:49

0

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

Evernote OAuth in a unit test

0

同时获得了由Seth的回答的accessToken,你需要你已经同时生成授权URL创建的请求令牌。这需要存储在会话对象中。如果直接存储,它将在检索存储的请求令牌时抛出错误。所以你需要将它存储在cache_store中。

为了处理请求令牌和访问令牌Evernote的API在你的Rails应用程序,你可以按照下面的步骤:

你需要设置一个会话cache_store从Evernote的保存您的OAuth令牌。以下内容添加到配置/初始化/ session_store.rb结束:

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

通过这种方式,您可以存储在会话中的对象并在需要时可以恢复。

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