我只想允许人们使用他们的社交帐户注册或登录。我已经进行了社交注册并登录,但我不知道如何禁用本地注册。
我已阅读文档,这听起来很接近我想要的
ACCOUNT_FORMS (={})
Used to override forms, for example: {‘login’: ‘myapp.forms.LoginForm’}
我似乎可以制作一个新的注册表单,并且只包含社交登录链接,但我希望有任何我忽略的更简单的方法。我对这一切还很陌生,所以我仍然会错过很多显而易见的事情。
我还尝试将下面的代码更改为 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
您必须更改 allauth 默认提供的模板(login、signup 等)和 urlpatterns,这与使用电子邮件的经典注册/登录流程相关。
urlpatterns
更改/减少可用路线可确保只有应有的路线可用。如果您操作正确,则任何尝试侵入现有 allauth 默认功能(与电子邮件相关)的行为都会显示 HTTP 错误 404。不幸的是,截至目前,还没有简单的切换或设置来简单地禁用 django-allauth 的基于电子邮件的注册和身份验证。未来可能会在 GitHub 上提供更多详细信息,请参阅:
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
]
解决方案并不是我最初想象的那样。更简单的方法是更改模板并删除该模板中的任何其他选项,而不是更改表单。
我的页面现在正确地仅显示社交身份验证,我很高兴。
如果有人有更好或更安全的答案,我会愿意接受。作为新的,我不知道这是否是最好的解决方案,但目前它看起来很棒并且将标记为已回答。
好的,事情就是这样。如果您没有使用任何社交帐户链接到您的用户,那么完成您描述的任务非常简单,只需包含您需要的网址即可。但是,如果您需要使用社交帐户链接您的用户,那么您必须包含所有网址,因为大多数第三方应用程序不会验证您的应用程序的请求。他们只接受 allauth 的请求。
from django.urls import path, re_path
from allauth.account import views as accountviews
urlpatterns = [
path('admin/', admin.site.urls),
# remember to comment out the following line since it will
# include all urls from allauth lib
# path('accounts/', include('allauth.urls'))
]
# assume you only want singup page and login page from allauth
urlpatterns += [path("acc/signup/", accountviews.signup, name="account_signup"),
path("acc/login/", accountviews.login, name="account_login")
]
这是另一种分别控制本地和社交帐户注册的方法:
覆盖名为
account_adapters.py
的文件中的两个帐户适配器:
from allauth.account.adapter import DefaultAccountAdapter
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
class NoNewUsersAccountAdapter(DefaultAccountAdapter):
def is_open_for_signup(self, request):
return False
class MySocialAccountAdapter(DefaultSocialAccountAdapter):
def is_open_for_signup(self, request, **kwargs):
return True
然后在您的设置中添加:
ACCOUNT_ADAPTER = 'myproject.account_adapter.NoNewUsersAccountAdapter'
SOCIALACCOUNT_ADAPTER = 'myproject.account_adapter.MySocialAccountAdapter'
您可能仍然想覆盖模板并只允许访问 Peterino 的答案中所述的部分 URL - 但如果您的用户群非常小且友好,那么设置这些适配器是一个务实的解决方案。
旁注:允许关闭 URL 的设置
SOCIALACCOUNT_ONLY
已在代码中但尚未发布(太新鲜)。