2009-10-07 97 views
1

我想出去Twitter的API認證的OAuth,撞到了磚牆時,我的代碼,吐出消息:OAauth寶石軌問題

(instance of OAuth::Consumer needs to have method `marshal_load') 

我的代碼:

@consumer=OAuth::Consumer.new("token","secret", { 
    :site=>"http://mysite.com/" 
    }) 
@[email protected]_request_token 
session[:request_token][email protected]_token.token 
session[:request_token_secret][email protected]_token.secret 
redirect_to @request_token.authorize_url 

錯誤在會話分配部分。 清除會話存儲不能解決問題。

rake tmp:clear 

代碼在irb中完美工作,但在app-wise上運行不起作用。 這可能是什麼問題和解決方案?

謝謝!

回答

0

經過一些Google搜索後,我想出了自己的解決方案。

我不知道這是我們的最佳解決方案,但我這是怎麼得到它周圍:

我交鋒下面的代碼我的environment.rb:

class OAuth::Consumer 
    def marshal_load(*args) 
     self 
    end 

更多一個黑客,這肯定會解決元帥加載錯誤。我不知道這是否會導致其他問題。

0

我認爲這與this question的問題相同。

這裏的答案表明,因爲令牌不是可序列化的,它不能從會話中檢索,並且你應該在會話中存儲密鑰並從該密鑰和祕密中創建一個新的令牌。

+0

這就是我的代碼正在做的對嗎? session [:request_token] = @ request_token.token session [:request_token_secret] = @ request_token.secret 在我的回調操作中,我從會話值中創建一個新的令牌。 – jonasespelita 2009-10-09 00:57:21

+0

您正在嘗試將令牌存儲在會話中,這是失敗的。如果您將字符串「token」和「secret」存儲在代碼中,則可以重新構建使用者,然後在需要重用時使用標記。 – Shadwell 2009-10-09 09:10:39

1

同樣的事情發生在我身上。這是因爲我第一次嘗試保存在我的會議,整個令牌:

會話[:request_token] = @ request_token

然後,我改變了我的代碼只存儲在令牌(串)會議:

會話[:request_token] = @ request_token.token

但是,我得到了同樣的錯誤,你

(OAuth的實例::消費者需要有方法`marshal_load')

由於Rails試圖看看我以前保存在我的會議(整個令牌)。只需進入瀏覽器的cookies並刪除您的開發主機的所有cookie(我的本地主機)。之後,再試一次,一切都應該正常工作。