django-allauth,我怎么才能允许通过社交注册/登录?

Bri*_*ead 5 python django django-allauth

我只想让人们注册或使用他们的社交帐户登录.我有社交注册并登录工作,但我无法弄清楚如何禁用本地注册.

我已经阅读了文档,这听起来很接近我想要的

ACCOUNT_FORMS (={})
    Used to override forms, for example: {‘login’: ‘myapp.forms.LoginForm’}
Run Code Online (Sandbox Code Playgroud)

看起来我可以创建一个新的注册表单,只包含社交日志链接,但我希望有更容易的方式,我忽略.我仍然对这一切都很陌生,所以我往往会错过很多明显的事情.

我也尝试将下面的代码更改为False,但这也禁用了社交注册.

allauth.account.adapter.py

def is_open_for_signup(self, request):
    """
    Checks whether or not the site is open for signups.

    Next to simply returning True/False you can also intervene the
    regular flow by raising an ImmediateHttpResponse
    """
    return True
Run Code Online (Sandbox Code Playgroud)

Pet*_*ino 6

更改模板和urlpatterns

您必须更改默认情况下allauth提供的模板(登录,注册等)和urlpatterns,它们与使用电子邮件的经典注册/登录流程相关.

  • 通过urlpatterns确定只有可用的路线可以改变/减少可用路线.如果您正确执行,则会显示任何企图入侵现有allauth默认功能(与电子邮件相关)的HTTP错误404.
  • 更改模板可以确保用户界面不提供与基于电子邮件的身份验证相关的内容.

没有简单的选择

不幸的是,截至今天,没有简单的切换或设置来简单地禁用基于电子邮件的注册和身份验证与django-allauth.更多细节可能会在未来的GitHub上,请参阅:

  • 问题#1227("仅限社交:通过简单设置禁用所有本地帐户处理")
  • 问题#345("如何禁用表单登录/注册?")

样品: urls.py

一个urls.py像这样将与Django的1.10目前Django的allauth(v0.30.0)工作:

from django.conf.urls import include, url

from allauth.account.views import confirm_email, login, logout
from allauth.compat import importlib
from allauth.socialaccount import providers

providers_urlpatterns = []

for provider in providers.registry.get_list():
    prov_mod = importlib.import_module(provider.get_package() + '.urls')
    providers_urlpatterns += getattr(prov_mod, 'urlpatterns', [])

urlpatterns = [
    url(r'^auth/', include(providers_urlpatterns)),
    url(r'^confirm-email/(?P<key>[-:\w]+)/$', confirm_email, name='account_confirm_email'),
    url(r'^login/$', login, name='account_login'),
    url(r'^logout/$', logout, name='account_logout'),
    url(r'^signup/$', login, name='account_signup'),  # disable email signup
]
Run Code Online (Sandbox Code Playgroud)


Bri*_*ead 2

解决方案并不是我最初的想法。更简单的方法是更改​​模板并删除该模板中的任何其他选项,而不是更改表单。

我的页面现在正确地仅显示社交身份验证,我很高兴。

如果有人有更好或更安全的答案,我会愿意接受。作为新的,我不知道这是否是最好的解决方案,但目前它看起来很棒并且将标记为已回答。