Add logic for phone (without '+' or '+7')
This commit is contained in:
parent
15e0466fb8
commit
c2d0dc7b27
@ -2,4 +2,7 @@ from django.contrib import admin
|
||||
from .models import *
|
||||
|
||||
|
||||
admin.site.register(SiteUser)
|
||||
@admin.register(SiteUser)
|
||||
class DevEventAdmin(admin.ModelAdmin):
|
||||
# fields = ['name', 'surname', 'phone', 'email', 'register_datetime']
|
||||
readonly_fields = ['register_datetime']
|
||||
|
@ -9,6 +9,7 @@ import random
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
import requests
|
||||
import re
|
||||
|
||||
|
||||
class PhoneVerificationService:
|
||||
@ -54,7 +55,7 @@ class PhoneVerificationService:
|
||||
request_success = False
|
||||
try:
|
||||
params = {
|
||||
"phone": phone,
|
||||
"phone": lambda: phone[1:] if phone.startswith("+") else phone,
|
||||
"ip": -1,
|
||||
"api_id": PHONE_VERIFICATION_APP_ID
|
||||
}
|
||||
@ -154,8 +155,18 @@ class SiteAccountManager(BaseUserManager):
|
||||
user.save(using=self._db)
|
||||
return user
|
||||
|
||||
def get_by_natural_key(self, email_):
|
||||
return self.get(email=email_)
|
||||
def get_by_natural_key(self, phone_):
|
||||
# Гоша попросил запилить фичу, чтобы принимались номера:
|
||||
# +79991112233
|
||||
# 79991112233
|
||||
# 9991112233
|
||||
|
||||
if re.match("^[0-9]{10}$", phone_) is not None:
|
||||
phone_ = f"+7{phone_}"
|
||||
elif re.match("^7[0-9]{10}$", phone_) is not None:
|
||||
phone_ = f"+{phone_}"
|
||||
|
||||
return self.get(phone=phone_)
|
||||
|
||||
|
||||
class SiteUser(AbstractBaseUser, PermissionsMixin):
|
||||
@ -167,8 +178,11 @@ class SiteUser(AbstractBaseUser, PermissionsMixin):
|
||||
])
|
||||
is_staff = models.BooleanField(default=False, verbose_name="Разрешение на вход в админку")
|
||||
is_phone_verified = models.BooleanField(default=False, verbose_name="Телефон верифицирован")
|
||||
REQUIRED_FIELDS = ['name', 'surname', 'phone']
|
||||
USERNAME_FIELD = 'email'
|
||||
|
||||
register_datetime = models.DateTimeField(default=datetime.now, editable=False)
|
||||
|
||||
REQUIRED_FIELDS = ['name', 'surname', 'email']
|
||||
USERNAME_FIELD = 'phone'
|
||||
|
||||
objects = SiteAccountManager()
|
||||
|
||||
@ -176,7 +190,21 @@ class SiteUser(AbstractBaseUser, PermissionsMixin):
|
||||
return self.email
|
||||
|
||||
def natural_key(self):
|
||||
return self.email
|
||||
return self.phone
|
||||
|
||||
@staticmethod
|
||||
def get_by_natural_key(key):
|
||||
# Гоша попросил запилить фичу, чтобы принимались номера:
|
||||
# +79991112233
|
||||
# 79991112233
|
||||
# 9991112233
|
||||
|
||||
if re.match("^[0-9]{10}$", key) is not None:
|
||||
key = f"+7{key}"
|
||||
elif re.match("^7[0-9]{10}$", key) is not None:
|
||||
key = f"+{key}"
|
||||
|
||||
return SiteUser.objects.get(phone=key)
|
||||
|
||||
def __str__(self):
|
||||
return self.email
|
||||
return f"{self.name} {self.surname}: {self.phone} ({self.email})"
|
||||
|
@ -1,7 +1,7 @@
|
||||
from datetime import datetime
|
||||
|
||||
from django.db import models
|
||||
from account.models import SiteUser
|
||||
from account.models import SiteUser, SiteAccountManager
|
||||
|
||||
from hashlib import sha512
|
||||
from django.contrib.auth.hashers import check_password
|
||||
@ -25,15 +25,15 @@ class UserToken(models.Model):
|
||||
|
||||
@staticmethod
|
||||
def auth(login: str, password: str):
|
||||
user = SiteUser.objects.filter(email=login)
|
||||
|
||||
if len(user) == 0:
|
||||
try:
|
||||
user = SiteUser.get_by_natural_key(login)
|
||||
except Exception:
|
||||
raise Exception(API_ERROR_INVALID_LOGIN)
|
||||
|
||||
if not check_password(password, user[0].password):
|
||||
if not check_password(password, user.password):
|
||||
raise Exception(API_ERROR_INVALID_PASSWORD)
|
||||
|
||||
return user[0]
|
||||
return user
|
||||
|
||||
@staticmethod
|
||||
def deauth(token: str):
|
||||
|
Reference in New Issue
Block a user