0

This in my backends.py page but I don't think its working because I pass both email or phone number but its not login by phone number.

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
4

1 回答 1

0

请使用现有的 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
...
于 2018-09-19T09:26:27.813 回答