轨道问题中的OAuth gem

时间:2009-10-07 08:03:09

标签: ruby-on-rails ruby api oauth gem

我正在尝试使用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身份运行它不起作用。 可能是什么问题和解决方案?

谢谢!

3 个答案:

答案 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的问题相同。

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