Skip to content

Instantly share code, notes, and snippets.

@thurloat
Last active December 16, 2015 02:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thurloat/5365917 to your computer and use it in GitHub Desktop.
Save thurloat/5365917 to your computer and use it in GitHub Desktop.
Super basic google oauth login /w email using sanction
from django import http
from django.core.urlresolvers import reverse
from django.views.generic.base import TemplateView
from sanction.client import Client
class MainView(TemplateView):
def dispatch(self, request, *args, **kwargs):
if not request.session.get('email'):
return self.use_oauth(request)
return super(MainView, self).dispatch(request, *args, **kwargs)
def use_oauth(self, request):
c = Client(auth_endpoint='https://accounts.google.com/o/oauth2/auth',
client_id=settings.OAUTH2['client_id'],
redirect_uri=request.build_absolute_uri(reverse('oauth')))
request.session['email'] = None
request.session['access_token'] = None
return http.HttpResponseRedirect(
c.auth_uri(
scope=settings.OAUTH2['scopes'],
access_type='offline'))
class GoogleAuthView(TemplateView):
def get(self, request):
c = Client(token_endpoint='https://accounts.google.com/o/oauth2/token',
resource_endpoint='https://www.googleapis.com/oauth2/v1',
redirect_uri=request.build_absolute_uri(reverse('oauth')),
client_id=settings.OAUTH2['client_id'],
client_secret=settings.OAUTH2['client_secret'],
token_transport='headers')
c.request_token(code=request.GET.get('code'))
# as format: {'verified_email': True, 'id': '123', 'email': 'foo@gmail.com'}
data = c.request('/userinfo')
request.session['email'] = data.get('email', None)
request.session['access_token'] = c.access_token
return http.HttpResponseRedirect('/')
class GoogleLogoutView(TemplateView):
def get(self, request):
old_token = request.session.get('access_token')
if old_token:
requests.get('https://accounts.google.com/o/oauth2/revoke?token=%s' % old_token)
request.session['email'] = None
request.session['access_token'] = None
request.session.save()
return http.HttpResponseRedirect('/')
@minichate
Copy link

lawl

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment