【问题标题】:Facebook migration from api v2.3 to v2.4 - Rails omniauthFacebook 从 api v2.3 迁移到 v2.4 - Rails omniauth
【发布时间】:2017-07-25 18:09:38
【问题描述】:

我在 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 不返回电子邮件,所以我需要在重定向到我的网站后添加电子邮件字段。为什么电子邮件是空白的?

【问题讨论】:

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


    【解决方案1】:

    你有没有试过在 devise.rb 中添加这个:

    config.omniauth :facebook, "KEY", "SECRET", scope: 'email', info_fields: 'email, name'

    还可以查看https://github.com/mkdynamic/omniauth-facebook 了解更多信息。

    【讨论】:

    • 正如您在我的代码中看到的那样:范围和 info_fields
    猜你喜欢
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多