diff --git a/lib/omniauth/strategies/oauth2.rb b/lib/omniauth/strategies/oauth2.rb index 0197452..b17a7a3 100644 --- a/lib/omniauth/strategies/oauth2.rb +++ b/lib/omniauth/strategies/oauth2.rb @@ -33,7 +33,15 @@ def self.inherited(subclass) attr_accessor :access_token def client - ::OAuth2::Client.new(options.client_id, options.client_secret, deep_symbolize(options.client_options)) + ::OAuth2::Client.new(client_id, client_secret, deep_symbolize(options.client_options)) + end + + def client_id + options.client_id.respond_to?(:call) ? options.client_id.call : options.client_id + end + + def client_secret + options.client_secret.respond_to?(:call) ? options.client_secret.call : options.client_secret end def callback_url diff --git a/spec/omniauth/strategies/oauth2_spec.rb b/spec/omniauth/strategies/oauth2_spec.rb index 0bffcde..af06b36 100644 --- a/spec/omniauth/strategies/oauth2_spec.rb +++ b/spec/omniauth/strategies/oauth2_spec.rb @@ -37,6 +37,18 @@ def app instance = subject.new(app, :client_options => {"ssl" => {"ca_path" => "foo"}}) expect(instance.client.options[:connection_opts][:ssl]).to eq(:ca_path => "foo") end + + it "allows client_id to be passed as a lambda function" do + client_id = proc { "abc" } + instance = subject.new(Object, client_id, "def") + expect(instance.client.id).to eq("abc") + end + + it "allows client_secret to be passed as a lambda function" do + client_secret = proc { "def" } + instance = subject.new(Object, "abc", client_secret) + expect(instance.client.secret).to eq("def") + end end describe "#authorize_params" do