def METHOD_NAME(self, request):
    """
    View to handle final steps of OAuth based authentication where the user
    gets redirected back to from the service provider
    """
    login_done_url = reverse(self.adapter.provider_id + "_callback")
    client = self._get_client(request, login_done_url)
    if not client.is_valid():
        if "denied" in request.GET:
            error = AuthError.CANCELLED
        else:
            error = AuthError.UNKNOWN
        extra_context = dict(oauth_client=client)
        return render_authentication_error(
            request,
            self.adapter.provider_id,
            error=error,
            extra_context=extra_context,
        )
    app = self.adapter.get_provider().app
    try:
        access_token = client.get_access_token()
        token = SocialToken(
            app=app,
            token=access_token["oauth_token"],
            # .get() -- e.g. Evernote does not feature a secret
            token_secret=access_token.get("oauth_token_secret", ""),
        )
        login = self.adapter.complete_login(
            request, app, token, response=access_token
        )
        login.token = token
        login.state = SocialLogin.unstash_state(request)
        return complete_social_login(request, login)
    except OAuthError as e:
        return render_authentication_error(
            request, self.adapter.provider_id, exception=e
        )