Методы обратного вызова omniauth-facebook вызывают ошибку установки приложения Facebook не
Я пытаюсь реализовать аутентификацию Facebook в своем приложении Rails 4.0.1, используя гем omniauth-facebook. Это руководство, которое я использую, чтобы помочь мне в этом, https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview
Я следовал всем инструкциям, и я получаю ошибку на Facebook. Я думаю, что ошибка исходит от одного из методов, который обрабатывает обратный вызов Facebook omniauth.
Facebook отображает ошибку "App Not Setup: разработчики этого приложения неправильно настроили это приложение для входа в Facebook"
omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
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
end
user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable,
:omniauthable, :omniauth_providers => [:facebook]
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
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.profile_name = auth.info.name # assuming the user model has a name
end
end
def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
if user
return user
else
registered_user = User.where(:email => auth.info.email).first
if registered_user
return registered_user
else
user = User.create(profile_name:auth.extra.raw_info.name,
provider:auth.provider,
uid:auth.uid,
email:auth.info.email,
password:Devise.friendly_token[0,20],
)
end
end
end
end
Когда я впервые закончил руководство со страницы обзора OmniAuth, оно работало. Я зарегистрировался для моей заявки с моим личным Facebook. Моя учетная запись успешно входит в систему. Когда я начал регистрировать другие учетные записи Facebook, он сломался, и я получил ошибку "App Not Setup".
Заранее спасибо, любая помощь очень ценится.
1 ответ
Мы столкнулись с той же проблемой и нашли ответ здесь:
"При тестировании ваших приложений переведите их в режим разработки. Это полностью скрывает ваше приложение от всех пользователей, которые не авторизованы на панели инструментов приложения для просмотра приложения, для ролей, описанных ниже. Обратите внимание, что когда ваше приложение находится в режиме разработки вы не можете вызывать какие-либо вызовы API от имени пользователей, которые не видят ваше приложение." Правила безопасности приложения Facebook
Решение состоит в том, чтобы добавить другие учетные записи, которые вы хотите проверить как администраторы, разработчики или тестеры, перейдя на панель разработчиков Facebook и добавив их в раздел Роли.