【问题标题】:Django AllAuth - Google - choose usernameDjango AllAuth - Google - 选择用户名
【发布时间】:2018-06-13 03:21:06
【问题描述】:

我们使用Django-allauth 允许用户使用 Google 注册和登录。

问题在于它会自动从 Google 帐户中选择名字作为username

是否可以让用户手动填写用户名?

我在Allauth-google docs 中没有找到这样的设置。

这些是来自settings.pyACCOUNT_ 设置

ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_EMAIL_SUBJECT_PREFIX = EMAIL_SUBJECT_PREFIX
ACCOUNT_EMAIL_CONFIRMATION_COOLDOWN = 1
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
ACCOUNT_PRESERVE_USERNAME_CASING = False
ACCOUNT_USERNAME_MIN_LENGTH = 4
ACCOUNT_USERNAME_REQUIRED = True

Docs中没有以SOCIALACCOUNT_开头的设置。

【问题讨论】:

  • 有一种方法可以创建自定义的唯一用户名。但我认为客户无法选择用户名,因为社交登录通常不会有这样的流程。
  • @SandeepBalagopal 是的,我知道用户名可以是唯一的,我很好奇 allauth 中是否有这样的内置选项。

标签: python django google-authentication django-allauth


【解决方案1】:

您需要确保 allauth 不会尝试绕过注册表单。

在settings.py中:

SOCIALACCOUNT_AUTO_SIGNUP = False

这会将用户重定向到默认注册页面,并有一个注册表单,用户可以在其中选择他们的用户名。 SOCIALACCOUNT_AUTO_SIGNUP django-allauth readthedocs explanation

如果需要,您还可以通过执行以下操作为使用社交帐户注册的用户自定义注册表单:

在settings.py中:

SOCIALACCOUNT_FORMS = {
    'signup': 'mysite.forms.MyCustomSocialSignupForm',
}

在您的模型文件中:

from allauth.socialaccount.forms import SignupForm
class MyCustomSocialSignupForm(SignupForm):

    def save(self, request):

        # Ensure you call the parent class's save.
        # .save() returns a User object.
        user = super(MyCustomSocialSignupForm, self).save(request)

        # Add your own processing here.

        # You must return the original result.
        return user

然后您可以在此表单中添加所需的任何自定义更改

django-allauth readthedocs for overriding default signup form

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 2012-11-20
    • 2021-08-16
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多