Неверный идентификатор приложения facebook, Omniauth rails 5.2.4 - PullRequest
1 голос
/ 11 декабря 2019

При входе в приложение через Facebook я получаю сообщение об ошибке «Неверный идентификатор приложения», даже если я подтвердил идентификатор приложения, и он правильный.

Что я делаю неправильно в своем коде?

Вот мой код:

devise.rb

config.omniauth :facebook, 'xxxxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxx', token_params: { parse: :json }

omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :developer unless Rails.env.production?
    provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']
end

rout.rb

Rails.application.routes.draw do

root to: 'surveys#index'
resources :surveys

devise_for :users, controllers: {
    sessions: 'users/sessions', 
    confirmations: 'confirmations',
    omniauth_callbacks: "users/omniauth_callbacks"
}
end

omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def facebook
    @user = User.from_omniauth(request.env["omniauth.auth"])

    if @user.persisted?
      sign_in_and_redirect @user, event: :authentication #this will throw if @user is not activated
      set_flash_message(:notice, :success, kind: "Facebook") if is_navigational_format?
    else
      session["devise.facebook_data"] = request.env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end


  def failure
    redirect_to root_path
  end
end

user.rb

class User < ApplicationRecord
    has_many :surveys
    mount_uploader :avatar, AvatarUploader

    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :validatable, :confirmable,
    :omniauthable, omniauth_providers: %i[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   # assuming the user model has a name
        # If you are using confirmable and the provider(s) you use validate emails, 
        # uncomment the line below to skip the confirmation emails.
        user.skip_confirmation!
      end
    end

    def self.new_with_session(params, session)
        super.tap do |user|
          if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
            user.email = data["email"] if user.email.blank?
          end
        end
    end
end

Заранее спасибо

1 Ответ

1 голос
/ 11 декабря 2019

Я думаю, что вы настраиваете omniauth два раза. Вы должны удалить omniauth.rb из папки config/initializers.

Помните, что config.omniauth добавляет в ваше приложение промежуточное программное обеспечение omniauth провайдера. Это означает, что вам не следует снова добавлять промежуточное программное обеспечение этого провайдера в config/initializers/omniauth.rb, так как они будут конфликтовать друг с другом и приводить к постоянной неудачной аутентификации.

Проверить Создать вики на Facebook omniauth для интеграции с Facebook.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...