4

我确实看到了几个类似的问题,但他们似乎并没有完全回答我遇到的问题。

到目前为止,我一直在做manage.py runserver, 在本地运行。

起初我试着把它放在我的settings.py中:

import allauth
ACCOUNT_EMAIL_REQUIRED = True

然后尝试将其扩展到:

import allauth
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_USERNAME_REQUIRED = True
SOCIALACCOUNT_AUTO_SIGNUP = True

但是当我尝试使用我的 google 帐户登录时(也就是说,在 openId-googlem 下而不是直接的 google 下),我可以看到它收到了我的电子邮件,但它不使用我的电子邮件。在回调函数中,我尝试加入一堆打印语句,当我打印以下内容时,它看起来像是从返回 url 中提取的user.__dict__

{'_state': <django.db.models.base.ModelState object at 0x101604dd0>,
 'date_joined': datetime.datetime(2012, 12, 3, 4, 35, 41, 949526, tzinfo=<UTC>),
 'email': u'CORRECT_USERNAME@gmail.com',
 'first_name': '',
 'id': None,
 'is_active': True,
 'is_staff': False,
 'is_superuser': False,
 'last_login': datetime.datetime(2012, 12, 3, 4, 35, 41, 949506, tzinfo=<UTC>),
 'last_name': '',
 'password': '',
 'username': ''}

也就是说,它填充电子邮件字段,但不填充username字段。我认为默认情况下,allauth 会填充usernamewith CORRECT_USERNAME,但它看起来是空的。然后当我打印出帐户时,我在该user_id字段中看不到任何内容。

当我跳到个人资料页面时,它会将username“用户”列为“用户”,这看起来像是绝对的后备/默认值。也就是说,这个:

{% user_display user %}
<p>Another try... <br />
{{user.username}}
<p>---------------------------</p>
{{ user.account_provider }}
<p>---------------------------</p>
{{ user.get_provider }}
<p>---------------------------</p>

给了我这个:

 user

Another try...
user

---------------------------

---------------------------

---------------------------

我在 runserver 控制台中看不到任何错误。

我还需要添加到 settings.py 中吗?我需要编写一些回调函数来从电子邮件字段中提取用户名吗?

如果这有什么不同,我正在使用 python 2.6.1(Snow Leopard)。

提前致谢!

4

1 回答 1

0

如果你看一下 django-allauth 的 OpenID 代码,你会发现它没有提取用户名,而只提取了电子邮件、名字、姓氏和姓名:

https://github.com/pennersr/django-allauth/blob/master/allauth/socialaccount/providers/openid/provider.py#L65

至于 ACCOUNT_USERNAME_REQUIRED 设置,您可以在文档中看到它在注册表单中使用:

ACCOUNT_USERNAME_REQUIRED (=True) 用户在注册时需要输入用户名。请注意,即使 ACCOUNT_AUTHENTICATION_METHOD 设置为电子邮件,也会要求用户这样做。当您不希望提示用户输入用户名时设置为 False。

我希望这可以帮助你解决你的疑惑。

于 2016-03-07T16:23:01.630 回答