Mam aplikację szyn (4.2.0), która używa funkcji logowania do Facebooka. Głównymi klejnotami są devise (3.4.0) i omniauth-facebook (2.0.0). Zarejestrowałem aplikację na Facebooku i korzystam z jej aplikacji testowej do programowania. Funkcja logowania na Facebooku działa w środowisku programistycznym.Uzyskiwanie błędu zwrotnego w serwisie Facebook nawet po włączeniu opcji "Logowanie OAuth przeglądarki wbudowanej" i określenie adresu URL wywołania zwrotnego
Podczas próby użycia funkcji logowania na Facebooku na serwerze produkcyjnym pojawia się błąd, ponieważ "Podany adres URL nie jest dozwolony w konfiguracji aplikacji: co najmniej jeden z podanych adresów URL jest niedozwolony w ustawieniach aplikacji. URL witryny lub URL strony docelowej lub domena musi być poddomeną jednej z domen aplikacji. "
The informacji o ustawieniach aplikacji testowej wykorzystywane w env dev są -
Settings:
Basic:
App Domains: 'localhost'
Website:
Site URL: 'http://localhost:3000'
Advanced:
OAuth Settings:
Embedded browser OAuth Login: Yes
Valid OAuth redirect URIs: "http://localhost:3000/users/auth/facebook/callback"
The szczegółów dotyczących ustawień zarejestrowanej aplikacji wykorzystywanych w env produkcji są -
Settings:
Basic:
App Domains: 'www.mysite.co'
Website:
Site URL: 'http://www.mysite.co'
Advanced:
OAuth Settings:
Embedded browser OAuth Login: Yes
Valid OAuth redirect URIs: "http://www.mysite.co/users/auth/facebook/callback"
Podałem następujące informacje w mojej secrets.yml
development:
secret_key_base: some_secret_key
facebook:
app_id: test_app_id
app_secret: test_app_secret
production:
secret_key_base: some_secret_key
facebook:
app_id: registered_app_id
app_secret: registered_app_secret
i zostały przy użyciu creds z secrets.yml w initialiser opracować jako
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
# config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
require 'omniauth-facebook'
config.omniauth :facebook, Rails.application.secrets.facebook['app_id'], Rails.application.secrets.facebook['app_secret'], scope: ['user_photos', 'email', 'public_profile']
rzeczywista nazwa domeny (zaczernione) nie ma literówek w dowolnym miejscu i jest to samo, wszędzie tam, gdzie jest używane.
Zawiera od routes.rb związanej omniauth są
cat config/routes.rb
Rails.application.routes.draw do
root 'home#index'
devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" }
# routes related to other controllers
end
Trasy są jak poniżej
bundle exec rake routes | grep user
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_omniauth_authorize GET|POST /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/facebook/}
user_omniauth_callback GET|POST /users/auth/:action/callback(.:format) users/omniauth_callbacks#:action
Jedynym kod związany z omniauth w całej aplikacji jest jak
$ cat app/controllers/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
#You need to implement the method below in your model (e.g. app/models/user.rb)
@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
end
_ "Musi to być adres URL witryny lub URL strony Canvas lub domena musi być poddomeną jednej z domen aplikacji" _ - i co masz ustawiono tę wartość? – CBroe
Podałem większość szczegółów dla "Ustawienia" i dla zakładki "Podstawowe" i "Zaawansowane" dla Facebooka w pytaniu –
Jak wygląda twój 'routes.rb'? – fylooi