相关疑难解决方法(0)

Django - 用电子邮件登录

我希望django通过电子邮件验证用户,而不是通过用户名.一种方法是提供电子邮件值作为用户名值,但我不希望这样.原因是,我有一个网址/profile/<username>/,因此我没有网址/profile/abcd@gmail.com/.

另一个原因是所有电子邮件都是唯一的,但有时会发生用户名.因此我将自动创建用户名为fullName_ID.

我怎样才能让Django通过电子邮件进行身份验证?

这就是我创建用户的方式.

username = `abcd28`
user_email = `abcd@gmail.com`
user = User.objects.create_user(username, user_email, user_pass)
Run Code Online (Sandbox Code Playgroud)

这是我登录的方式.

email = request.POST['email']
password = request.POST['password']
username = User.objects.get(email=email.lower()).username
user = authenticate(username=username, password=password)
login(request, user)
Run Code Online (Sandbox Code Playgroud)

除了首先获取用户名之外,还有其他任何登录信息吗?

django

53
推荐指数
7
解决办法
4万
查看次数

在django中使用电子邮件而不是登录名

首先,这不是如何对电子邮件/密码对进行身份验证的问题,而是如何生成逻辑,如果您愿意,还可以生成漂亮的数据结构.

我想在给定的django项目中使用电子邮件作为用户名.但是,我无法重新使用auth.User模型提供的字段,原因至少有两个:

  1. auth.User.username的字段max_length是30个字符,对于某些电子邮件地址可能不够.

  2. auth.User.email不是唯一的 - 显然不能满足前提条件,即用户名必须是唯一的.

因此,一个显而易见的方法是将用户名存储在自定义配置文件中,该配置文件链接到auth.User.在这种情况下,我们必须处理以下问题:

  1. 为auth.User.username生成唯一的用户名 - 电子邮件的md5哈希应该没问题吗?
  2. 完全遗漏auth.User.email为空 - 因为它只有75个字符长,而根据RFC 5321(有效电子邮件地址的最大长度是多少?),电子邮件可以长达256个字符.

以下问题源于提出的解决方案:

  1. 一个是无法为密码重置等标准操作重用内置视图/模板
  2. 如果电子邮件更改,则必须更新auth.User.username

为了增加石油,django开发人员不太可能在任何可预见的未来修复此限制 - 请参阅http://code.djangoproject.com/ticket/11365

所以问题是:有没有其他方法可以做到这一点你是否看到上面提出的解决方案有任何其他缺点?

谢谢!

database architecture django data-structures

7
推荐指数
2
解决办法
1004
查看次数

标签 统计

django ×2

architecture ×1

data-structures ×1

database ×1