我正在使用python-social-auth
进行第三方登录和注销。用Facebook,Twitter和Google Plus登录最初是成功的(它会询问我的用户名/电子邮件和密码)。我的问题是当我退出然后再通过其中任何一个登录时,我将自动登录,甚至不再询问我的用户名/电子邮件和密码。我没有退出吗?
这是我的disconnect pipeline
:
SOCIAL_AUTH_DISCONNECT_PIPELINE = (
'social.pipeline.disconnect.allowed_to_disconnect',
'social.pipeline.disconnect.get_entries',
'social.pipeline.disconnect.revoke_tokens',
'social.pipeline.disconnect.disconnect',
)
这是我的退出视图:
from django.contrib.auth import logout as auth_logout
def logout(request):
auth_logout(request)
return render_to_response('logged-out.html', {}, RequestContext(request))
答案 0 :(得分:1)
所以我在我的网站上对此进行了测试。以下是解释注销和断开连接行为的链接: http://python-social-auth.readthedocs.io/en/latest/logging_out.html 如您所见,您需要断开与社交应用的连接,您需要使用断开连接(断开连接是您的用户可以要求您的项目“忘记我的帐户”的方式。)。您正在删除数据库中 social_auth_usersocialauth 表中的用户关联。要做到这一点,你需要做的是:
**settings.py:**
SOCIAL_AUTH_DISCONNECT_PIPELINE = (
# Verifies that the social association can be disconnected from the current
# user (ensure that the user login mechanism is not compromised by this
# disconnection).
#'social.pipeline.disconnect.allowed_to_disconnect',
# Collects the social associations to disconnect.
'social.pipeline.disconnect.get_entries',
# Revoke any access_token when possible.
'social.pipeline.disconnect.revoke_tokens',
# Removes the social associations.
'social.pipeline.disconnect.disconnect',
)
模板中的:
<form id="myform" method="post" action="{% url 'social:disconnect' 'google-oauth2' %}5/?next={{request.path }}">
{% csrf_token %}
<input type="hidden" name="name" value="value" />
<a onclick="document.getElementById('myform').submit();">discon</a>
</form>
在第一行中,google-oatuh2之后的数字5表示数据库表中的用户ID。因此下面图片中的第一个用户将从我的应用中删除/断开连接。 要检查断开连接功能是否有效,请参阅 social_auth_usersocialauth 表,了解是否已删除用户关联。 但问题是,每当你通过谷歌,Facebook连接到你自己的应用程序,这意味着你也登录到谷歌或Facebook网站。(在首次登录时,它打开Facebook或谷歌的登录页面)。即使您从自己的应用程序断开连接,您也需要从Facebook或谷歌网站注销。否则,您的浏览器会让您保持登录状态,当您再次尝试连接到您的网络应用时,您将自动登录。