Make the auto-refresh of tokens configurable and optional; in distributed environments, this allows us to handle token refreshes in a way that does not hammer the auth endpoint.

This commit is contained in:
Ryan Biesemeyer 2012-12-29 00:02:02 +00:00
parent 40cbcd8e7e
commit ab23fe7539
1 changed files with 13 additions and 1 deletions

View File

@ -47,6 +47,10 @@ module Google
# <li><code>:oauth_1</code></li>
# <li><code>:oauth_2</code></li>
# </ul>
# @option options [Boolean] :auto_refresh_token (true)
# The setting that controls whether or not the api client attempts to
# refresh authorization when a 401 is hit in #execute. If the token does
# not support it, this option is ignored.
# @option options [String] :application_name
# The name of the application using the client.
# @option options [String] :application_version
@ -89,6 +93,7 @@ module Google
# default authentication mechanisms.
self.authorization =
options.key?(:authorization) ? options[:authorization] : :oauth_2
self.auto_refresh_token = options.fetch(:auto_refresh_token){ true }
self.key = options[:key]
self.user_ip = options[:user_ip]
@discovery_uris = {}
@ -159,6 +164,13 @@ module Google
# @return [String] The API key.
attr_accessor :key
##
# The setting that controls whether or not the api client attempts to
# refresh authorization when a 401 is hit in #execute.
#
# @return [Boolean]
attr_accessor :auto_refresh_token
##
# The IP address of the user this request is being performed on behalf of.
#
@ -540,7 +552,7 @@ module Google
request.authorization = options[:authorization] || self.authorization unless options[:authenticated] == false
result = request.send(connection)
if result.status == 401 && authorization.respond_to?(:refresh_token)
if result.status == 401 && authorization.respond_to?(:refresh_token) && auto_refresh_token
begin
authorization.fetch_access_token!
result = request.send(connection)