我正在尝试使用OAuth进行Twitter api身份验证,并在我的代码发出消息时碰到了一堵砖墙:
(instance of OAuth::Consumer needs to have method `marshal_load')
我的代码:
@consumer=OAuth::Consumer.new( "token","secret", {
:site=>"http://mysite.com/"
})
@request_token=@consumer.get_request_token
session[:request_token]=@request_token.token
session[:request_token_secret]=@request_token.secret
redirect_to @request_token.authorize_url
错误在会话分配部分中。 清除会话存储不能解决问题。
rake tmp:clear
代码在irb中完美运行但是以app身份运行它不起作用。 可能是什么问题和解决方案?
谢谢!
答案 0 :(得分:1)
同样的事发生在我身上。这是因为我首先尝试将整个令牌存储在我的会话中:
会话[:request_token] = @ request_token
然后,我将代码更改为仅在会话中存储令牌(字符串):
会话[:request_token] = @ request_token.token
然而,我得到了和你一样的错误
(OAuth :: Consumer的实例需要方法`marshal_load')
因为Rails试图查看我之前存储在会话中的内容(整个令牌)。只需进入浏览器的cookie并删除开发主机的所有cookie(我的是localhost)。在那之后,再试一次,一切都应该正常。
答案 1 :(得分:0)
经过一些谷歌搜索后,我找到了自己的解决方案。
我不知道这是否是最佳解决方案,但这就是我解决这个问题的方法:
我将以下代码添加到我的environment.rb:
class OAuth::Consumer
def marshal_load(*args)
self
end
更多的黑客,这肯定会解决编组负载错误。我不知道这是否会引起其他问题。
答案 2 :(得分:0)
我认为这与this question的问题相同。
那里的答案表明,由于令牌不可序列化,因此无法从会话中检索到令牌,并且您应该将密钥存储在会话中并从该密钥和秘密创建新令牌。