final user name will have an integer suffix in case it's already taken.
+- OAuth authentication will store access_token by default, set this value to False to avoid such behavior::
+
+ SOCIAL_AUTH_EXTRA_DATA = False
+
------
OpenId
"OAuth providers return an unique user id in response"""
return response['id']
+ def extra_data(self, user, uid, response, details):
+ """Return access_token to store in extra_data field"""
+ return response.get('access_token', '')
+
class TwitterBackend(OAuthBackend):
"""Twitter OAuth authentication backend"""
.get(provider=self.name,
uid=uid)
except UserSocialAuth.DoesNotExist:
+ if getattr(settings, 'SOCIAL_AUTH_EXTRA_DATA', True):
+ extra_data = self.extra_data(user, uid, response, details)
+ else:
+ extra_data = ''
user_oauth = UserSocialAuth.objects.create(user=user, uid=uid,
- provider=self.name)
+ provider=self.name,
+ extra_data=extra_data)
else:
if user_oauth.user != user:
- raise ValueError, 'The identity has already been claimed'
+ raise ValueError, 'Identity already claimed'
return user_oauth
+ def extra_data(self, user, uid, response, details):
+ """Return default blank user extra data"""
+ return ''
+
def update_user_details(self, user, details):
"""Update user details with new (maybe) data"""
first_name = details.get('firstname') or user.first_name
user = models.ForeignKey(User, related_name='social_auth')
provider = models.CharField(max_length=32)
uid = models.TextField()
+ extra_data = models.TextField(default='', blank=True)
class Meta:
"""Meta data"""