ruby-on-rails - 用于 Facebook 的 omniauth.auth 未返回完整哈希值且无法使用 facebook 成功登录

标签 ruby-on-rails ruby devise omniauth omniauth-facebook

我正在研究来自 http://www.theodinproject.com/ruby-on-rails/final-project 的 facebook 克隆项目.

我受困于 omniauth-facebook 部分,无法成功登录 facebook。我认为问题可能是由于 request.env["omniauth.auth"]。当我尝试提出 request.env["omniauth.auth"].to_yaml 时。我得到以下不完整的哈希值。它缺少很多信息,例如 first_name、last_name、gender 等。

--- !ruby/hash:OmniAuth::AuthHash
provider: facebook
uid: '10206926404981253'
info: !ruby/hash:OmniAuth::AuthHash::InfoHash
  name: Thomas Pan
  image: http://graph.facebook.com/10206926404981253/picture
credentials: !ruby/hash:OmniAuth::AuthHash
  token: <token>
  expires_at: 1442277104
  expires: true
extra: !ruby/hash:OmniAuth::AuthHash
  raw_info: !ruby/hash:OmniAuth::AuthHash
    name: Thomas Pan
    id: <id>

** 为了安全起见,用 <> 替换了一些信息。

我也在使用它和设计。

其他一切似乎都已正确设置,因为我已按照此处的说明进行设计和 omniauth-facebook。 https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

用户.rb

devise :database_authenticatable, :registerable,
   :recoverable, :rememberable, :trackable, :validatable,
   :omniauthable, :omniauth_providers => [:facebook]

def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
    user.email = auth.info.email
    user.password = Devise.friendly_token[0,20]
    user.first_name = auth.info.first_name
    user.last_name = auth.info.last_name
    user.gender = auth.extra.raw.gender
  end  
end  

设计.rb

config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET']

路线.rb

devise_for :users, :controllers => { :registrations => "users/registrations", :omniauth_callbacks => "users/omniauth-callbacks" }

omniauth_callbacks_controller.rb

def facebook
  raise request.env['omniauth.auth'].to_yaml
  end
end

如有任何帮助,我们将不胜感激!

版本信息: rails 4.2.1 ruby 2.0.0

最佳答案

devise.rb 中:

config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET'], scope: 'email', info_fields: 'email,name,first_name,last_name,gender'

关于ruby-on-rails - 用于 Facebook 的 omniauth.auth 未返回完整哈希值且无法使用 facebook 成功登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31467290/

相关文章:

ruby-on-rails - 如何在 HAML %li HTML 标记的 CSS 属性中成功插入 Ruby?

ruby - 在 Mongoid 中插入

ruby-on-rails - 在模型中使用设计助手

ruby-on-rails - rails : How to restrict signup to admin using Devise

ruby-on-rails - 覆盖由同一模块中的类方法定义的 ActiveSupport::Concern 模块中的方法

ruby-on-rails - Gemfile.lock运行时不断变化 'rake spec'

ruby-on-rails - Rswag 和 Rspec : Undefined method for URL parameter

ruby - Ruby 中的冒号运算符是什么?

ruby-on-rails - 设计:用户模型中的 authentication_token 列为空

ruby-on-rails - Rails : Options for build bundler gemfile