Драгоценный камень в проблеме рельсов - PullRequest
1 голос
/ 07 октября 2009

Я пробую OAuth для аутентификации в твиттер-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, но запуск его в приложении не работает. В чем может быть проблема и решение этой проблемы?

Спасибо!

Ответы [ 3 ]

1 голос
/ 28 февраля 2010

То же самое случилось со мной. Это было потому, что я ПЕРВЫЙ попытался сохранить весь токен в моей сессии:

сессия [: request_token] = @ request_token

Затем я изменил свой код, чтобы хранить только токен (строку) в сеансе:

сессия [: request_token] = @ request_token.token

Однако я получил ту же ошибку, что и вы

(экземпляр OAuth :: Consumer должен иметь метод `marshal_load ')

Потому что Rails пытался посмотреть, что я ранее сохранил в своем сеансе (весь токен). Просто зайдите в куки вашего браузера и удалите все ваши куки для вашего хоста разработки (мой был localhost). После этого попробуйте еще раз, и все должно работать нормально.

0 голосов
/ 07 октября 2009

Я думаю, что это та же проблема, что и этот вопрос .

Ответы там предполагают, что, поскольку токен не сериализуем, он не может быть извлечен из сеанса, и что вы должны сохранить ключ в сеансе и создать новый токен из этого и секрета.

0 голосов
/ 07 октября 2009

После некоторого поиска, я нашел собственное решение.

Я не знаю, является ли это лучшим решением для этого, но вот как я обошел это:

Я добавил следующий код в свою среду. Rb:

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

Больше хака, Это определенно исправит ошибку загрузки маршала. Я не знаю, может ли это вызвать другие проблемы.

...