Гендерный захват пользователя с помощью omniauth - facebook

Я вот с сомнением. Я использую драгоценный камень «omniauth-facebook» и могу вывести на экран имя пользователя, фотографию и адрес электронной почты. Я хотел бы получить новые данные, например, пол. Дай создал миграцию, добавил поле в таблицу пользователей, поместил метод в поле зрения, все в порядке. Однако я не могу понять, как написать имя метода и дает метод indisponivel. У кого-нибудь есть идеи? Я знаю, что ошибка в имени метода, но не знаю, как его вызвать. Спасибо. Трассировка стека ошибок

Блок кода Erb

# app/models/user.rb

class User < ActiveRecord::Base
  def self.omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create
    do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.image = auth.info.image
      user.email = auth.info.email
      user.public_profile.gender = auth.public_profile.gender
      user.token = auth.credentials.token
      user.expires_at = Time.at(auth.credentials.expires_at)
      user.save!
    end
  end
end

person Peterson Fonseca    schedule 12.03.2016    source источник
comment
Код класса User.rb User ‹ ActiveRecord::Base def self.omniauth(auth) where(provider: auth.provider, uid: auth.uid).first_or_create do |user| user.provider = auth.provider user.uid = auth.uid user.name = auth.info.name user.image = auth.info.image user.email = auth.info.email user.public_profile.gender = auth.public_profile .gender user.token = auth.credentials.token user.expires_at = Time.at(auth.credentials.expires_at) user.save! конец конец конец   -  person Peterson Fonseca    schedule 12.03.2016


Ответы (1)


Похоже, вы создали свою модель на основе учебника, и этот учебник устарел для текущего API Facebook, который вы можете увидеть здесь.

Хэш аутентификации Facebook, завершенный

Таким образом, вы ищете пол в разделе информации, но он находится в разделе extra->raw_info, что означает, что ваш код будет выглядеть примерно так:

  user.provider = auth.provider
  user.uid = auth.uid
  user.name = auth.info.name
  user.image = auth.info.image
  user.email = auth.info.email
  user.public_profile.gender = auth.extra.raw_info.gender
  user.token = auth.credentials.token
  user.expires_at = Time.at(auth.credentials.expires_at)
  user.save!
person trh    schedule 13.03.2016
comment
Спасибо, мой друг. Мне пришлось изменить одну вещь в коде, который вы передали. Я изменил строку user.public_profile.gender = auth.extra.raw_info.gender на user.gender = auth.extra.raw_info.gender Большое спасибо. - person Peterson Fonseca; 14.03.2016
comment
вы могли бы помочь мне с чем-то еще? Интересно, как получить список друзей. Я до сих пор не могу найти эту информацию. Заранее благодарю за внимание. - person Peterson Fonseca; 14.03.2016
comment
Ваше приложение должно иметь разрешение user_friends от ОБА пользователя и его/ее друга, чтобы увидеть отношения. Таким образом, можно получить список друзей из API, но он будет включать ТОЛЬКО друзей, которые также используют ваше приложение и также предоставили вам соответствующие разрешения. - person user3268305; 15.03.2016