【问题标题】:Django: User object's 'email' attributeDjango:用户对象的“电子邮件”属性
【发布时间】:2015-09-21 13:06:33
【问题描述】:

我正在开发一个应用程序,用户可以使用我使用python-social-auth 实现的 Twitter 帐户凭据登录我的应用程序。现在,Django 的身份验证系统提供了User 对象,具有usernamepasswordemailfirst_namelast_name 五个主要属性,如文档中所述:https://docs.djangoproject.com/en/1.7/topics/auth/default/#user-objects

现在,在用户使用他/她的 Twitter 帐户成功登录后,我希望预先填写表单的某些字段,例如用户的全名、电子邮件地址、Twitter 帐户用户名等。为此,我使用了这样的东西来预先填写用户的全名表单字段:

{% if user and not user.is_anonymous %}

   Full Name: <input type = "text" name = "name" value = "{{user.get_full_name}}"">

{% endif %}

这是用户通过他/她的 Twitter 帐户成功登录后上述表单字段的样子:

完美!按预期工作。同样,usernamelast_namefirst_name 等属性对当前登录的User 对象也适用。

但是,当我尝试使用以下方法在表单中预先填写电子邮件地址字段时:

Email Address: <input type = "text" name = "email" value = "{{user.email}}"">

但是,{{user.email}} 的值没有返回任何内容,我的表单字段看起来像这样:

为什么User 对象的email 属性没有返回用户使用其Twitter 凭据登录的电子邮件地址?所有其他 User 属性似乎工作得很好。这背后有什么原因吗?

编辑 1:

这是我在管理员的数据库的样子:

所以email 字段为空,因此User 对象不返回该属性值的任何内容。但是为什么每次新用户使用他们的 Twitter 帐户登录时,电子邮件地址都没有存储在数据库中呢?

【问题讨论】:

  • 您确定您从用户那里获得了电子邮件地址吗?我会先检查你的数据库中有什么。
  • 您可能正在从您正在使用的身份验证后端获取身份验证信号,但它不会以某种方式自动保存到数据库中,因此您可以使用用户电子邮件进行身份验证,但实际上您并没有它可能存储了吗?
  • @PatrickBeeson 我已经编辑了我的原始帖子。问题出在你预料的地方。有什么解决办法吗?
  • @KyleL。是的,由于某种原因,用户的电子邮件地址没有存储在数据库中。我已经编辑了我的原始帖子。

标签: python django python-2.7 authentication twitter


【解决方案1】:

这可能是因为您在注册过程中没有将电子邮件实际存储在表单数据库中的任何内容,因此在您看来有类似

p = #user object from form. 
p.email = request.POST['email']
p.save()

【讨论】:

  • 这不起作用。 'email' 属性' 仍然不存储任何值。
【解决方案2】:

使用 python-social-auth 时,电子邮件存储在其他地方。他们创建了一个 SocialUser 表,并且您查找的数据可能以 JSON 格式存储在 extra_data 字段中 - 查看 PSA 创建的 model

提取附加信息可能不像以前那么简单,但您可以添加功能,在创建社交用户时将电子邮件地址保存到用户表中。见Pipeline

【讨论】:

  • “extra_data”字段不包含电子邮件地址数据。
  • @ManasChaturvedi 我回答的重点是告诉您,您需要调查收集数据的方式和地点。推特登录期间是否返回电子邮件?您是否检查过 API 调用返回了什么?如果没有返回电子邮件,则不存在电子邮件。查看 API 调用,然后查看 Pipeline 以确定要存储的“extra_data”。所有这些都是可配置的。
【解决方案3】:

在管理员中,如果 user_email 未显示,则可能没有添加特定用户的电子邮件。

只需通过再次检查数据库来确保这一点。

【讨论】:

  • 我已经编辑了我的原始帖子。正如您预期的那样,数据库中的电子邮件地址字段为空。这背后有什么原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 2021-06-26
  • 2015-06-12
  • 2013-03-03
相关资源
最近更新 更多