allow specifying custom state key-values (#218)
This commit is contained in:
parent
f2f83b20bc
commit
9e797f13b8
|
@ -154,6 +154,8 @@ module Google
|
||||||
# @param [String, Array<String>] scope
|
# @param [String, Array<String>] scope
|
||||||
# Authorization scope to request. Overrides the instance scopes if
|
# Authorization scope to request. Overrides the instance scopes if
|
||||||
# not nil.
|
# not nil.
|
||||||
|
# @param [Hash] state
|
||||||
|
# Optional key-values to be returned to the oauth callback.
|
||||||
# @return [String]
|
# @return [String]
|
||||||
# Authorization url
|
# Authorization url
|
||||||
def get_authorization_url options = {}
|
def get_authorization_url options = {}
|
||||||
|
@ -162,12 +164,14 @@ module Google
|
||||||
raise NIL_REQUEST_ERROR if request.nil?
|
raise NIL_REQUEST_ERROR if request.nil?
|
||||||
raise NIL_SESSION_ERROR if request.session.nil?
|
raise NIL_SESSION_ERROR if request.session.nil?
|
||||||
|
|
||||||
|
state = options[:state] || {}
|
||||||
|
|
||||||
redirect_to = options[:redirect_to] || request.url
|
redirect_to = options[:redirect_to] || request.url
|
||||||
request.session[XSRF_KEY] = SecureRandom.base64
|
request.session[XSRF_KEY] = SecureRandom.base64
|
||||||
options[:state] = MultiJson.dump(
|
options[:state] = MultiJson.dump(state.merge(
|
||||||
SESSION_ID_KEY => request.session[XSRF_KEY],
|
SESSION_ID_KEY => request.session[XSRF_KEY],
|
||||||
CURRENT_URI_KEY => redirect_to
|
CURRENT_URI_KEY => redirect_to
|
||||||
)
|
))
|
||||||
options[:base_url] = request.url
|
options[:base_url] = request.url
|
||||||
super options
|
super options
|
||||||
end
|
end
|
||||||
|
|
|
@ -63,6 +63,12 @@ describe Google::Auth::WebUserAuthorizer do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should allow adding custom state key-value pairs" do
|
||||||
|
url = authorizer.get_authorization_url request: request, state: { james: "bond", kind: 1 }
|
||||||
|
expect(url).to match(%r{%22james%22:%22bond%22})
|
||||||
|
expect(url).to match(%r{%22kind%22:1})
|
||||||
|
end
|
||||||
|
|
||||||
it "should include request forgery token in state" do
|
it "should include request forgery token in state" do
|
||||||
expect(SecureRandom).to receive(:base64).and_return("aGVsbG8=")
|
expect(SecureRandom).to receive(:base64).and_return("aGVsbG8=")
|
||||||
url = authorizer.get_authorization_url request: request
|
url = authorizer.get_authorization_url request: request
|
||||||
|
|
Loading…
Reference in New Issue