繁体   English   中英

django-allauth,我如何只允许通过社交注册/登录?

[英]django-allauth, how can I only allow signup/login through social?

我只想允许人们使用他们的社交帐户注册或登录。 我有社交注册并登录工作,但我不知道如何禁用本地注册。

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

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

更改模板和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
]

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

我的页面现在正确显示社交认证,我很高兴。

如果有人有更好或更安全的答案,我会对此持开放态度。 仍然是新的,我不知道这是否是最好的解决方案,但现在它似乎很好,并将标记为回答。

好的,事情就是这样。 如果您没有使用任何社交帐户链接到您的用户,那么只需包含您需要的网址即可完成您描述的任务。 但是,如果您需要使用社交帐户来链接您的用户,那么您必须包含所有 url,因为大多数第三方应用程序不会验证来自您的应用程序的请求。 他们只接受来自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")
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM