【发布时间】: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