ruby-on-rails-4 - 捆绑更新后 FB-omniauth 损坏,凭据无效

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

oauth 数据不会进入 Controller 操作。无法理解出了什么问题。此 Controller 中还有一个身份验证提供程序,它运行良好,核心完全相同。

devise  3.5.10 
rails 4.2.4

devise.rb
config.omniauth :facebook, Figaro.env.fb_app_id, Figaro.env.fb_app_secret, callback_url: 'https://chotam.ru/users/auth/facebook/callback',
                  scope: 'email, publish_actions'

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

def facebook
    logger.error "fb here" # IT'S NO OUTPUT HERE ON REQUEST!!!
    logger.error(request.env['omniauth.auth'])
    result = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
    @user = result[:user]
    status = result[:status]
    if @user
      token = request.env["omniauth.auth"]["credentials"]["token"]
      @user.account.update_attribute(:fb_token, token)
      if status[:redirect] == 'added' || status[:redirect] == 'existed'
        flash[status[:key]] = status[:value]
        render 'devise/registrations/edit'
      else
        flash[status[:key]] = status[:value]
        sign_in_and_redirect @user, event: :authentication
      end
    else
      flash[status[:key]] = status[:value]
      redirect_to new_user_registration_url
    end
  end

更新
使用记录器,我可以看到以下内容:
E, [2017-03-28T23:46:41.255481 #21494] ERROR -- : (facebook) Authentication failure! invalid_credentials: OAuth2::Error, :
{"access_token":"real_token","token_type":"bearer"$

如何找出问题所在?
而且我发现用户不能再更改他们的密码了。

最佳答案

好的...找到了一种无需更新 gem 的方法。

您可以在 config/initializers/devise.rb 中添加以下内容文件位于 config.omniauth线:

client_options: {
  site: "https://graph.facebook.com/v2.3",
  authorize_url: "https://www.facebook.com/v2.3/dialog/oauth"
},
token_params: {
  parse: :json
}

带有完整配置的 YMMV,但它看起来像这样:
config.omniauth :facebook, ENV["FACEBOOK_KEY"], ENV["FACEBOOK_SECRET"],
    scope: 'email',
    secure_image_url: true,
    auth_type: 'https',
    info_fields: 'email,name,first_name,last_name',
    client_options: {
        site: "https://graph.facebook.com/v2.3",
        authorize_url: "https://www.facebook.com/v2.3/dialog/oauth"
    },
    token_params: {
        parse: :json
    }

主要问题是他们升级了响应格式,并且没有强制版本指针和 token 参数来解析新的 json 格式(而不是 url 编码格式),它会在响应中中断,因为它无法识别回吐的内容来自 api。

关于ruby-on-rails-4 - 捆绑更新后 FB-omniauth 损坏,凭据无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066415/

相关文章:

ruby-on-rails - 从我的 Ruby on Rails Gem 渲染 View

ruby-on-rails - 如何将 arbre 代码干燥成可重用的组件?

ruby-on-rails-4 - 使用 Rails ar-octopus gem 执行事务

ruby-on-rails - 时间.current.tap{|t| t.change小时: 10 } is not working in Rails 4. 2

mysql - 在rails deviseomniauth中为多个用户使用OR查询

ruby-on-rails - omn​​iauth 自定义请求阶段表单

iphone - 如何格式化 POST 以使用基本 HTTP 身份验证和 Devise Rails Gem 创建用户

ruby-on-rails - 使用 Rails 和 Devise 的 STI

ruby-on-rails - 设计 - Omniauth - 如果用户通过 Facebook 登录,则 Conceal 密码字段

ruby-on-rails - Cookie 溢出与 Twitter 登录