2011-02-15 44 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