Django用户通过电子邮件和密码登录
问题描述:
我刚刚完成了Django教程,希望创建一个网站,要求用户使用电子邮件地址和密码登录。这与Django的内置管理站点完全分离(只有一两个特殊人员可以访问管理员)。Django用户通过电子邮件和密码登录
我的问题是:
我应该创建一个单独的数据库表来存储用户凭证,信息等?或者我应该使用现有的Django表?
如前所述,用户应使用电子邮件地址登录。这会成为Django的问题吗?
其他的最佳做法将不胜感激。谢谢。
答
您不需要用户登录的单独表格。只要利用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
您可以用电子邮件作为创建自定义用户实现身份验证的用户用户名:http://*.com/a/16638473/821594 – stalk 2014-09-26 06:26:22