当app id和app secret对于每个请求都不同时,请使用omniauth-facebook?

pow*_*boy 12 ruby-on-rails omniauth

omn​​iauth Facebook的 README提到了如何设置它在初始化,以及如何设置类似的选项scope只有每个请求.我想知道是否可以为每个请求设置app id和app secret.

Iva*_*grx 17

你可以这样做:

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

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,:setup => true
end
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器上,您必须定义以下内容:

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
Run Code Online (Sandbox Code Playgroud)

当然,您必须在routes.rb上添加关联的路由.

  #Facebook Omniauth routes
  match '/auth/facebook/callback' => 'session#authorize_callback'
  match '/auth/facebook/setup' => 'session#setup'
Run Code Online (Sandbox Code Playgroud)

祝好运

问候.伊万.


小智 5

我使用devise(跟随这个railscast:http: //railscasts.com/episodes/235-devise-and-omniauth-revised ),但我花了一些时间来了解如何实现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
Run Code Online (Sandbox Code Playgroud)

感谢您对此的帮助!