Auto create auth token for user

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 4d320362e2
commit 01e09741f6
  1. 27
      apps/user/models.py

@ -3,9 +3,12 @@ from django.contrib.auth.models import AbstractUser, UserManager
from django.contrib.postgres import fields as pgfields
from django.utils.translation import gettext_lazy as _
from rest_framework.authtoken.models import Token
from json import dumps
from api.v1 import serializers
class User(AbstractUser):
USER_ROLE = 0
AUTHOR_ROLE = 1
@ -24,8 +27,10 @@ class User(AbstractUser):
(FEMALE, 'Женщина'),
)
email = models.EmailField(_('email address'), unique=True)
role = models.PositiveSmallIntegerField('Роль', default=0, choices=ROLE_CHOICES)
gender = models.CharField('Пол', max_length=1, default='n', choices=GENDER_CHOICES)
role = models.PositiveSmallIntegerField(
'Роль', default=0, choices=ROLE_CHOICES)
gender = models.CharField(
'Пол', max_length=1, default='n', choices=GENDER_CHOICES)
birthday = models.DateField('День рождения', null=True, blank=True)
country = models.CharField('Страна', max_length=50, null=True, blank=True)
city = models.CharField('Город', max_length=85, null=True, blank=True)
@ -38,7 +43,9 @@ class User(AbstractUser):
vkontakte = models.URLField('ВКонтакте', default='', null=True, blank=True)
fb_id = models.BigIntegerField(null=True, blank=True, unique=True)
fb_data = pgfields.JSONField(default={}, null=True, blank=True)
is_email_proved = models.BooleanField('Верифицирован по email', default=False)
is_email_proved = models.BooleanField(
'Верифицирован по email', default=False
)
photo = models.ImageField('Фото', null=True, blank=True, upload_to='users')
USERNAME_FIELD = 'email'
@ -51,3 +58,17 @@ class User(AbstractUser):
user_data = serializers.user.UserSerializer(instance=self).data
user_data = dumps(user_data, ensure_ascii=False)
return user_data
@receiver(post_save, sender=User)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if (
(instance.is_active or instance.fb_id) and
instance.role in [User.AUTHOR_ROLE, User.ADMIN_ROLE] and not
hasattr(instance, 'auth_token')
):
Token.objects.create(user=instance)
elif (
not (instance.is_active or instance.fb_id) or
instance.role not in [User.AUTHOR_ROLE, User.ADMIN_ROLE]
) and hasattr(instance, 'auth_token'):
instance.auth_token.delete()

Loading…
Cancel
Save