37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from django.contrib.auth.models import User
|
|
from oauth2_provider.models import AccessToken
|
|
from rest_framework_social_oauth2.backends import DjangoOAuth2
|
|
|
|
|
|
class GMOAuth2(DjangoOAuth2):
|
|
|
|
def get_user_details(self, response):
|
|
if response.get(self.ID_KEY, None):
|
|
user = User.objects.get(pk=response[self.ID_KEY])
|
|
return {'username': user.username,
|
|
'email': user.email,
|
|
'fullname': user.get_full_name(),
|
|
'first_name': user.first_name,
|
|
'last_name': user.last_name
|
|
}
|
|
return {}
|
|
|
|
def user_data(self, access_token, *args, **kwargs):
|
|
try:
|
|
user_id = AccessToken.objects.get(token=access_token).user.pk
|
|
return {self.ID_KEY: user_id}
|
|
except AccessToken.DoesNotExist:
|
|
return None
|
|
|
|
def do_auth(self, access_token, *args, **kwargs):
|
|
"""Finish the auth process once the access_token was retrieved"""
|
|
data = self.user_data(access_token, *args, **kwargs)
|
|
response = kwargs.get('response') or {}
|
|
response.update(data or {})
|
|
kwargs.update({'response': response, 'backend': self})
|
|
if response.get(self.ID_KEY, None):
|
|
user = User.objects.get(pk=response[self.ID_KEY])
|
|
return user
|
|
else:
|
|
return None
|