ruby-on-rails-4 – 即使在启用“嵌入式浏览器OAuth登录”并指定
发布时间:2020-12-16 21:05:02 所属栏目:百科 来源:网络整理
导读:我有一个使用Facebook登录功能的rails(4.2.0)应用程序.主要的宝石是设计(3.4.0)和omniauth-facebook(2.0.0).我已在Facebook上注册该应用程序,并一直在使用其测试应用程序进行开发. Facebook登录功能适用于开发环境. 当尝试在生产服务器上使用Facebook登录功
我有一个使用Facebook登录功能的rails(4.2.0)应用程序.主要的宝石是设计(3.4.0)和omniauth-facebook(2.0.0).我已在Facebook上注册该应用程序,并一直在使用其测试应用程序进行开发. Facebook登录功能适用于开发环境.
当尝试在生产服务器上使用Facebook登录功能时,我收到错误“应用程序配置不允许给定URL:应用程序的设置不允许使用一个或多个给定的URL.它必须与网站URL或Canvas URL或域必须是App域之一的子域.“ 在dev env中使用的测试应用程序设置的详细信息如下 – 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" 生产环境中使用的注册应用程序设置的详细信息如下 – 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" 我在secretts.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 并且一直在设计初始化中使用来自secrets.yml的信用 # ==> 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'] 实际域名(黑化)在任何地方都没有拼写错误,无论在何处使用都是相同的. 包含与omniauth相关的routes.rb为 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 路线如下 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 在整个应用程序中唯一与omniauth相关的代码是 $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 解决方法
我没有足够的声誉来发表评论.您需要在Facebook开发中心更改设置以匹配生产站点的URL而不是localhost.
在此处更新您的网址: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |