django - 我们可以通过用户名以及来自 django 中用户名字段的电子邮件对用户进行身份验证吗?
问题描述
我正在使用 Django 内置身份验证。用户可以通过 django 登录表单中的用户名和密码登录。但我希望用户也能够使用电子邮件 ID 和密码登录。
登录表单只有 用户名字段。我们可以使用此登录字段输入电子邮件 ID 或用户名并验证用户身份吗?
这是我的 django 登录视图
class LoginForm(generic.CreateView):
print("login")
form_class = LoginForm
template_name = "feed/SignUp.html"
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
UserModel = get_user_model()
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return redirect('')
else:
print(form.errors)
我的想法就像我们可以通过用户名或电子邮件登录 GitHub 帐户一样。我应该怎么做才能实现这一目标?
解决方案
您可以检查用户名输入是否是一封电子邮件:
from django.core.validators import validate_email
try:
validate_email(username_field) # If it's a valid email
username = User.objects.get(email=username_field).username # Get username with email
authenticate(username=username, password=password_field) # Authenticate that user
except:
# It's a username, so do the normal authentication
推荐阅读
- c++ - 进程以状态 -1073740940 终止
- sikuli - Sikuli - 脚本中的配置 1920x1080
- apache-kafka - Kafka Consumer Deserializer 是否必须匹配 Producer Serializer?
- javascript - 如何将函数从类组件切换到函数组件
- c# - 带有 MultipartFormDataContent 的 Blazor WASM .net HttpClient 不起作用
- get - Internet Explorer 11 重定向在 GET 请求中不起作用
- google-bigquery - 在 Google BigQuery 中动态设置变量值
- php - 在 WooCommerce + ACF 中将每公斤的自定义价格限制为小数点后 2 位
- data-visualization - 简单条形图仪表板的 Splunk 查询
- c# - 如何使用隐藏甚至最小化的控制台运行此应用程序?