加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:57:00 所属栏目:百科 来源:网络整理
导读:oauth数据不会转到控制器操作.无法理解什么是错的.在这个控制器中还有一个auth提供程序,它运行良好,核心是完全相同的. devise 3.5.10 rails 4.2.4devise.rbconfig.omniauth :facebook,Figaro.env.fb_app_id,Figaro.env.fb_app_secret,callback_url: 'https:/
oauth数据不会转到控制器操作.无法理解什么是错的.在这个控制器中还有一个auth提供程序,它运行良好,核心是完全相同的.

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

UPDATE
使用logger,我可以看到以下内容:

E,[2017-03-28T23:46:41.255481 #21494] ERROR -- : (facebook) Authentication failure! invalid_credentials: OAuth2::Error,:
{"access_token":"real_token","token_type":"bearer"$

怎么找到什么问题?
而且我发现用户不能再更改密码了.

解决方法

好的…找到了一种没有更新宝石的方法.

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

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
    }

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读