Сессионная проблема с использованием Facebooker с Ruby on Rails - PullRequest
2 голосов
/ 10 августа 2010

Я читаю книгу «Разработка платформы Facebook», чтобы попытаться написать небольшую игру для Facebook, и столкнулся с «маленькой» проблемой: я пытаюсь вставить пользователя каждый раз, когда он регистрируется, в базу данных.в моем компьютере.Я использую несколько методов, описанных в книге, но, похоже, есть несколько проблем:

  1. Не получается получить сессионный ключ из Facebook с помощью помощников Facebooker дляRoR, и, следовательно, это значение равно нулю в таблице в моей базе данных.

  2. Каждый раз, когда я перезагружаю веб-страницу, я вижу, что даже если значение facebook_id одинаково, один и тот же пользовательдобавили еще одну строку в мою таблицу в базе данных, хотя это не так;он просто должен обновить атрибут session_key, если он изменится - в любом случае, сейчас это значение равно нулю.

Это три метода, которые я использую для выполнения всего этого:

def self.for(facebook_id,facebook_session=nil)
    user = User.find_or_create_by_facebook_id(facebook_id)
    unless facebook_session.nil?
      user.store_session(facebook_session.session_key)
    end
  end

  def store_session(session_key)
    if self.session_key != session_key
      update_attribute(:session_key, session_key)
    end
  end

  # Re-create a Facebooker::Session object outside a request
  def facebook_session
    @facebook_session ||= returning Facebooker::Session.create do |session|
      # Facebook sessions are good for only one hour storing
      session.secure_with!(session_key,facebook_id,1.hour.from_now)
    end
  end

Большое спасибо всем заранее! 1.

1 Ответ

1 голос
/ 10 августа 2010

Эй, к сожалению, Facebook постоянно меняет свой API!

Убедитесь, что книга обновлена ​​и что ни один из API не изменился на момент написания книги. Также проверьте, что драгоценный камень также обновлен.

Я лично использую http://github.com/chrisdinn/hyper-graph при работе с Facebook. Он делает звонки на график Facebook (graph.facebook.com)

...