使用 python-social-auth 注销

Logout with python-social-auth

我正在使用 python-social-auth 进行第三方登录和注销。使用 Facebook、Twitter 和 Google Plus 登录一开始是成功的(它会询问我的 username/email 和密码)。我的问题是,当我注销然后通过其中任何一个重新登录时,我将自动登录,甚至无需再次询问我的 username/email 和密码。我没有登出吗?

这是我的 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))

所以我已经在我的网站上测试过了。这是解释注销和断开连接行为的 link: http://python-social-auth.readthedocs.io/en/latest/logging_out.html 如您所见,要与社交应用程序断开连接,您需要使用断开连接(断开连接是您的用户可以要求您的项目“忘记我的帐户”的方式。)。这样一来,您将删除数据库中 social_auth_usersocialauth table 中的用户关联。要做到这一点,您需要做的是:

**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表示DB中的用户IDtable。因此,下图中的第一个用户将是来自我的应用程序的 deleted/disconnected。 要检查断开连接功能是否有效,请查看您的 social_auth_usersocialauth table 用户关联是否已被删除。 但问题是,每当您通过 google、facebook 连接到您自己的应用程序时,这意味着您也在登录 google 或 facebook 网站。(因为在首次登录时,它会打开 facebook 或 google的登录页面)。即使在您与自己的应用程序断开连接后,您也需要从 Facebook 或 google 网站注销。否则你的浏览器会让你保持登录状态,当你再次尝试连接到你的网络应用程序时,你将自动登录。