'Handles the login for the Google user, returning an access token.
The result is a dictionary containing an ``access_token`` field
([among others](https://developers.google.com/identity/protocols/OAuth2WebServer#handlingtheresponse)).
Unlike other ``get_authenticated_user`` methods in this package,
this method does not return any additional information about the user.
The returned access token can be used with `OAuth2Mixin.oauth2_request`
to request additional information (perhaps from
``https://www.googleapis.com/oauth2/v2/userinfo``)
Example usage:
.. testcode::
class GoogleOAuth2LoginHandler(tornado.web.RequestHandler,
tornado.auth.GoogleOAuth2Mixin):
@tornado.gen.coroutine
def get(self):
if self.get_argument(\'code\', False):
access = yield self.get_authenticated_user(
redirect_uri=\'http://your.site.com/auth/google\',
code=self.get_argument(\'code\'))
user = yield self.oauth2_request(
"https://www.googleapis.com/oauth2/v1/userinfo",
access_token=access["access_token"])
# Save the user and access token with
# e.g. set_secure_cookie.
else:
yield self.authorize_redirect(
redirect_uri=\'http://your.site.com/auth/google\',
client_id=self.settings[\'google_oauth\'][\'key\'],
scope=[\'profile\', \'email\'],
response_type=\'code\',
extra_params={\'approval_prompt\': \'auto\'})
.. testoutput::
:hide:'

@_auth_return_future
def get_authenticated_user(self, redirect_uri, code, callback):

    http = self.get_auth_http_client()
    body = urllib_parse.urlencode({'redirect_uri': redirect_uri, 'code': code, 'client_id': self.settings[self._OAUTH_SETTINGS_KEY]['key'], 'client_secret': self.settings[self._OAUTH_SETTINGS_KEY]['secret'], 'grant_type': 'authorization_code'})
    http.fetch(self._OAUTH_ACCESS_TOKEN_URL, functools.partial(self._on_access_token, callback), method='POST', headers={'Content-Type': 'application/x-www-form-urlencoded'}, body=body)
