我们如何使用django中的电子邮件或电话号码登录

时间:2018-09-19 08:13:32

标签: django django-models django-2.1

这在我的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 :(得分: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
...
相关问题