Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当每个请求的应用程序id和应用程序机密不同时,是否使用omniauth facebook?_Ruby On Rails_Omniauth - Fatal编程技术网

Ruby on rails 当每个请求的应用程序id和应用程序机密不同时,是否使用omniauth facebook?

Ruby on rails 当每个请求的应用程序id和应用程序机密不同时,是否使用omniauth facebook?,ruby-on-rails,omniauth,Ruby On Rails,Omniauth,自述文件中提到了如何在初始值设定项中设置它,以及如何仅为每个请求设置scope等选项。我想知道是否可以为每个请求设置应用id和应用机密。如果您使用的是Desive,您可以这样做 config.omniauth :facebook, :setup => lambda{ current_app_secret = // Get current domain current_app_key = // Get config env['omniauth.strat

自述文件中提到了如何在初始值设定项中设置它,以及如何仅为每个请求设置
scope
等选项。我想知道是否可以为每个请求设置应用id和应用机密。

如果您使用的是Desive,您可以这样做

config.omniauth  :facebook, :setup => lambda{
      current_app_secret = // Get current domain
      current_app_key = // Get config
      env['omniauth.strategy'].options[:client_id] = current_app_secret
      env['omniauth.strategy'].options[:client_secret] = current_app_key
    }
您可以这样做:

在omniauth.rb上,执行以下操作:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,:setup => true
end
然后,您必须在控制器上定义以下内容:

def setup
 request.env['omniauth.strategy'].options[:client_id] = @site.facebook_key
 request.env['omniauth.strategy'].options[:client_secret] = @site.facebook_secret
 render :text => "Setup complete.", :status => 404
end
当然,您必须在routes.rb上添加关联的路由

  #Facebook Omniauth routes
  match '/auth/facebook/callback' => 'session#authorize_callback'
  match '/auth/facebook/setup' => 'session#setup'
祝你好运

问候。 Ivan.

我使用Desive(遵循以下railscast:),但我花了一段时间才理解如何实现Ivangrx的解决方案。结果证明这很容易。这是我的密码:

# /config/initializers/devise.rb
config.omniauth :facebook, setup: true

# routes.rb
devise_scope :user do  
  #where omniauth_callback is the controller I made when following the Railscast
  get "users/auth/facebook/setup" => "omniauth_callbacks#setup"
end

# omniauth_callbacks_controller.rb
def setup
  request.env['omniauth.strategy'].options[:client_id] = @site.facebook_id
  request.env['omniauth.strategy'].options[:client_secret] = @site.facebook_key
  render :text => "Setup complete.", :status => 404
end

谢谢你在这方面的帮助

我想知道为什么要为每个请求设置应用id和应用机密。每个应用程序只有一个密钥。如果我的网站需要支持多个facebook应用程序,该怎么办?想想SaaS,这段代码在哪里?初始化器?如果需要从数据库中获取
当前应用程序\u secret
,该怎么办?在初始值设定项中包含ActiveRecord代码看起来很难看,即使它可以工作。我认为您也应该能够在应用程序控制器中重写它们。您可以在应用程序\u控制器中编写前\u过滤器。告诉我会发生什么,谢谢!但事实上我并没有使用Desive。我的网站不需要Deviate提供的任何功能。它对我不起作用:/users/auth/facebook重定向我,我得到
没有路径匹配[get]“/oauth/authorize”
,所以每次身份验证过程它都会向“/auth/facebook/setup”发出一个请求?为什么
:status=>404
?以及如何配置
OmniAuth.config.full_host
?我让它工作了,但Twitter也不行。。。我设置了两个
setup
方法,但omniauth twitter似乎没有相同的功能?Kyle,我不确定这是否有帮助,但在twitter的情况下,您必须将“request.env['omniauth.strategy'].options[:client_id]”替换为“request.env['omniauth.strategy'.]options[:consumer_key]”和“request.env”['omniauth.strategy'].options[:client_secret]“to”request.env['omniauth.strategy'].options[:consumer_secret]”。是否可以使用相同的设置功能来处理多个策略(例如:facebook和google_oauth2)。