Facebook从api v2.3迁移到v2.4 - Rails omniauth

时间:2017-07-25 18:09:39

标签: ruby-on-rails facebook-graph-api devise omniauth-facebook

我在Rails 4.0.0中有一些旧应用程序。直到2017年7月8日,facebook注册工作正常,但现在不推荐使用v2.3,用户无法在我的页面上注册。

这是user.rb代码:

def self.from_omniauth(auth)

    oauth = Koala::Facebook::OAuth.new('xxx', 'xxxx')
    new_access_info = oauth.exchange_access_token_info auth.credentials.token

    new_access_token = new_access_info["access_token"]
    new_access_expires_at = DateTime.now + new_access_info["expires"].to_i.seconds

    user = where(auth.slice(:provider, :uid)).first

    if !user.present?
      user = where(email: auth.info.email).first

      if user.present?
        user.provider = auth.provider
        user.uid = auth.uid
        user.oauth_token = new_access_token
        user.oauth_expires_at = new_access_expires_at
        user.save!
      else
        user = User.new
        user.provider = auth.provider
        user.uid = auth.uid
        user.email = auth.info.email
        user.profile.gender = 1
        user.confirmed_at = Time.now
        user.first_name = auth.info.first_name
        user.fb_image_url = auth.info.image

        user.oauth_token = new_access_token
        user.oauth_expires_at = new_access_expires_at

        @str = user.fb_image_url.to_s
        @index = @str.index('type')
        @sliced = @str.slice(0, @index)
        @slices = @sliced + 'width=800&height=800'
        user.fb_image_url = @slices
        if auth.info.gender == 'female'
            user.fb_gender = 1
        elsif auth.fb_gender == 'male'
            user.fb_gender = 2
        end

      end

    end 

    user 

end

这是/initializers/devise.rb:

require "omniauth-facebook"

  config.omniauth :facebook, 'xxxxxxx', 'xxxxxxxxx', 
    scope: 'email,public_profile', 
    info_fields: 'email', 
    client_options: {
    site: 'https://graph.facebook.com/v2.4', authorize_url: "https://www.facebook.com/v2.4/dialog/oauth"},
    token_params: { parse: :json }

Gemfile - gem 'omniauth-facebook', '1.4.0'

我需要改变什么来使它工作?现在点击“通过Facebook注册”用户被重定向到Facebook,他登录,接受权限,并在重定向到我的网站后 - 他重定向到/ users / sign_in - 不像之前的/ users / sign_up那样填写更多的字段。

我停止在Rails中制作应用程序,所以不知道如何制作它。谢谢你的帮助

编辑:

好的,现在它可以工作,但facebook不会返回电子邮件,所以我需要在重定向到我的网站后添加电子邮件字段。电子邮件为何空白?

1 个答案:

答案 0 :(得分:0)

您是否尝试在devise.rb中添加此内容:

config.omniauth:facebook," KEY"," SECRET",范围:'电子邮件',info_fields:'电子邮件,姓名'

另请查看https://github.com/mkdynamic/omniauth-facebook了解详情。