1

我正在尝试使用 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 中运行良好,但在应用程序方面运行它不起作用。这可能是什么问题和解决方案?

谢谢!

4

3 回答 3

1

这样的事情我也经历过。这是因为我首先尝试将整个令牌存储在我的会话中:

会话[:request_token]=@request_token

然后,我将代码更改为仅在会话中存储令牌(字符串):

session[:request_token]=@request_token.token

但是,我遇到了和你一样的错误

(OAuth::Consumer 的实例需要有方法 `marshal_load')

因为 Rails 试图查看我之前存储在会话中的内容(整个令牌)。只需进入浏览器的 cookie 并删除开发主机的所有 cookie(我的是 localhost)。之后,再试一次,一切都应该正常。

于 2010-02-28T07:13:13.270 回答
0

经过一番谷歌搜索后,我想出了自己的解决方案。

我不知道这是否是最好的解决方案,但这就是我解决它的方法:

我在 environment.rb 中添加了以下代码:

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

更多的 hack,这肯定会修复 marshal 加载错误。我不知道这是否会导致其他问题。

于 2009-10-07T08:51:23.630 回答
0

我认为这和这个问题是同一个问题。

那里的答案表明,由于令牌不可序列化,因此无法从会话中检索它,您应该将密钥存储在会话中并从中创建一个新令牌和秘密。

于 2009-10-07T11:59:51.093 回答