django-allauth socialaccount如何实现“完全”注销?

6

我正在开发一款可能成为某种自助应用程序的应用。虽然我是python和django的新手,但它正在顺利进行。我的allauth注册流程使用社交登录(目前是Google)或“本地”电子邮件地址和密码。

如果我使用Google帐户登录,然后注销,我会被重定向到登录页面,很酷。问题是,我并没有真正退出Google帐户。如果我点击社交登录链接,那么我就回到了用户区域,而不需要输入密码。

allauth有一种方法可以注销并删除社交认证令牌吗?我需要捕获注销信号并自己查找/删除令牌吗?

1个回答

2
看起来有一个内置解决方案。可以给action参数赋值"reauthenticate"。作为新手,我不确定我是否已经按照Python/Django的方式添加了它,但我已经编辑了模板:
myProject/templates/allauth/socialaccount/snippets/provider_list.html

并在社交认证 href 行中添加了 action=reauthenticate,例如:
{% load socialaccount %}

{% get_providers as socialaccount_providers %}

{% for provider in socialaccount_providers %}
{% if provider.id == "openid" %}
{% for brand in provider.get_brands %}
<li>
  <a title="{{brand.name}}" 
     class="socialaccount_provider {{provider.id}} {{brand.id}}" 
     href="{% provider_login_url provider.id openid=brand.openid_url process=process action='reauthenticate' %}"
     >{{brand.name}}</a>
</li>
{% endfor %}
{% endif %}
<li>
  <a title="{{provider.name}}" class="socialaccount_provider {{provider.id}}" 
     href="{% provider_login_url provider.id process=process scope=scope auth_params=auth_params %}">{{provider.name}}</a>
</li>
{% endfor %}

那似乎解决了问题。

从2019年8月的文档中得知:"您可以传递一个带有值为reauthenticate的操作参数,以指示您希望用户重新进行身份验证,即使他们之前已经登录过。目前,这仅由Facebook、Google和Twitter支持。" - PhoebeB
还有从文档中可以看到:"您必须在首次登录和重新认证请求时将AUTH_PARAMS['access_type']设置为offline,以便接收刷新令牌。" https://django-allauth.readthedocs.io/en/latest/providers.html#google - Flimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接