from django.shortcuts import redirect from django.contrib import auth, messages from django.views.decorators.cache import never_cache from django.conf import settings from test_oauth.session import TESTOAuth2Session @never_cache def login(request, next=None): authorization_url, request.session['oauth_state'] = TESTOAuth2Session( scope=getattr(settings, 'TEST_OAUTH_SCOPES', ['read_profile']), ).authorization_url() return redirect(authorization_url) @never_cache def logout(request): if request.user.is_authenticated(): auth.logout(request) return redirect(getattr(settings, 'TEST_OAUTH_REDIRECT', '/')) @never_cache def callback(request): token = ( TESTOAuth2Session(state=request.session['oauth_state']) .fetch_token(code=request.GET.get('code')) ) user = auth.authenticate(token=token) if user is not None: auth.login(request, user) else: messages.error(request, 'Login failed.') return redirect(getattr(settings, 'TEST_OAUTH_REDIRECT', '/'))