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)。