Django用户通过电子邮件和密码登录

问题描述:

我刚刚完成了Django教程,希望创建一个网站,要求用户使用电子邮件地址和密码登录。这与Django的内置管理站点完全分离(只有一两个特殊人员可以访问管理员)。Django用户通过电子邮件和密码登录

我的问题是:

  1. 我应该创建一个单独的数据库表来存储用户凭证,信息等?或者我应该使用现有的Django表?

  2. 如前所述,用户应使用电子邮件地址登录。这会成为Django的问题吗?

其他的最佳做法将不胜感激。谢谢。

+0

您可以用电子邮件作为创建自定义用户实现身份验证的用户用户名:http://*.com/a/16638473/821594 – stalk 2014-09-26 06:26:22

您不需要用户登录的单独表格。只要利用Auth framework允许用户使用他们的电子邮件地址登录非常简单,但有几种不同的方法来处理这个问题。你要开始:https://docs.djangoproject.com/en/1.7/topics/auth/customizing/

布兰登是正确的, 要做到这一点最简单的方法是定制的后端,而不是Django的默认 让我们做这 在您的settings.py:

AUTHENTICATION_BACKENDS = ('accounts.backend.EmailOrUsernameModelBackend') 

然后在账户/ backend.py:

from django.contrib.auth import get_user_model 
from django.contrib.auth.backends import ModelBackend as _ModelBackend 

User = get_user_model() 


class EmailOrUsernameModelBackend(_ModelBackend): 
    """ Authenticate user by username or email """ 

    def authenticate(self, username=None, password=None): 
     if '@' in username: 
      kwargs = {'email': username} 
     else: 
      kwargs = {'username': username} 
     try: 
      user = User.objects.get(**kwargs) 
      if user.check_password(password): 
       return user 
      else: 
       return None 
     except User.DoesNotExist: 
      return None 

    def get_user(self, user_id=None): 
     try: 
      return User.objects.get(pk=user_id) 
     except User.DoesNotExist: 
      return None 

现在你可以用你的用户名或电子邮件 登录玩得开心

首先是什么是中间件 这是一个轻量级的低级“插件”系统,用于全局改变Django的输入或输出。

而且你可以在这里阅读如何activating-middleware

创建电子邮件后端middleware将帮助您根据电子邮件地址作为用户名

def authenticate(self, username=None, password=None): 
     try: 
      user = User.objects.get(email=username) 
      if user.check_password(password): 
       return user 
     except User.DoesNotExist: 
      return None