【发布时间】:2015-09-21 13:06:33
【问题描述】:
我正在开发一个应用程序,用户可以使用我使用python-social-auth 实现的 Twitter 帐户凭据登录我的应用程序。现在,Django 的身份验证系统提供了User 对象,具有username、password、email、first_name 和last_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 帐户成功登录后上述表单字段的样子:
完美!按预期工作。同样,username、last_name、first_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