Как мы можем войти, используя электронную почту или номер телефона в Django - PullRequest
0 голосов
/ 19 сентября 2018

Это на моей странице backends.py, но я не думаю, что это работает, потому что я передаю как адрес электронной почты, так и номер телефона, но не могу войти по номеру телефона.

from .models import UserModel
from django.db.models import Q
import logging


class MyAuthBackend(object):

    def authenticate(self, email_or_phone_number=None, password=None):
        try:
            user = UserModel.objects.get(Q(email=email_or_phone_number) | 
                           Q(phone_number=email_or_phone_number))
            if user.check_password(password):
                return user
            else:
                return None
        except UserModel.DoesNotExist:
            logging.getLogger("error_logger").error("user with login %s 
                        does not exists" % login)
            return None
        except Exception as e:
            logging.getLogger("error_logger").error(repr(e))
            return None

    def get_user(self, user_id):
        try:
            user = UserModel.objects.get(sys_id=user_id)
            if user.is_active:
                return user
            return None
        except UserModel.DoesNotExist:
            logging.getLogger("error_logger").error("user with %(user_id)d 
                      not found")
            return None

1 Ответ

0 голосов
/ 19 сентября 2018

Пожалуйста, используйте существующую модель пользователя Django django.contrib.auth.models.User.Вы можете войти, получив экземпляр этой модели и передав его функции login:

from django.contrib.auth import login
...
   user = YourModel.objects.get(params=...).user ## get the user instance using your filter / I suppose that user is Foreignkey on your model
   login(request,user) ## get the request from your view
...
...