def METHOD_NAME(self, context):
    state_data = context.state[self.name]
    aresp = self.consumer.parse_response(
        AuthorizationResponse, info=json.dumps(context.request))
    self._verify_state(aresp, state_data, context.state)
    url = self.config['server_info']['token_endpoint']
    data = dict(
        grant_type='authorization_code',
        code=aresp['code'],
        redirect_uri=self.redirect_url,
        client_id=self.config['client_config']['client_id'],
        client_secret=self.config['client_secret'])
    r = requests.post(url, data=data)
    response = r.json()
    if self.config.get('verify_accesstoken_state', True):
        self._verify_state(response, state_data, context.state)
    auth_info = self.auth_info(context.request)
    user_email_response = self.user_information(response["access_token"], 'email_info')
    user_info = self.user_information(response["access_token"], 'user_info')
    user_email = {
        "emailAddress": [
            element['handle~']['emailAddress']
            for element in user_email_response['elements']
        ]
    }
    user_info.update(user_email)
    internal_response = InternalData(auth_info=auth_info)
    internal_response.attributes = self.converter.to_internal(
        self.external_type, user_info)
    internal_response.subject_id = user_info[self.user_id_attr]
    return self.auth_callback_func(context, internal_response)