1

Twitter api認証用にOAuthを試していますが、コードがメッセージを吐き出すと、レンガの壁にぶつかりました。

 (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

次に、トークン(文字列)のみをセッションに格納するようにコードを変更しました。

セッション[:request_token] = @ request_token.token

しかし、私はあなたと同じエラーを受け取っていました

(OAuth ::Consumerのインスタンスにはメソッド`marshal_load'が必要です)

Railsは、以前にセッションに保存したもの(トークン全体)を調べようとしていたためです。ブラウザのCookieにアクセスして、開発ホスト(私の場合はローカルホスト)のすべてのCookieを削除するだけです。その後、もう一度試してみてください。すべて正常に動作するはずです。

于 2010-02-28T07:13:13.270 に答える
0

ぐるぐる回った後、私は自分自身の解決策を思いついた。

これがこれに対する最善の解決策であるかどうかはわかりませんが、これが私がそれを回避した方法です:

次のコードをenvironment.rbに追加しました。

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

もっとハック、これは間違いなくマーシャルロードエラーを修正します。これが他の問題を引き起こすかどうかはわかりませんが。

于 2009-10-07T08:51:23.630 に答える
0

この質問と同じ問題だと思います。

そこでの回答は、トークンがシリアル化できないため、セッションから取得できないこと、およびセッションにキーを保存し、それとシークレットから新しいトークンを作成する必要があることを示唆しています。

于 2009-10-07T11:59:51.093 に答える