【问题标题】:Django - Social_Auth - Facebook Logout - NotAllowedToDisconnectDjango - Social_Auth - Facebook 注销 - NotAllowedToDisconnect
【发布时间】:2013-08-11 10:04:53
【问题描述】:

我使用 django 包 social_auth 在我的网站上实现了 facebook 登录。我能够正确登录并获取所有数据。但我无法退出。

我没有使用 django.user.login 和注销。我正在使用 socialauth_begin 和 socialauth_disconnect

我可以登录,进入社交身份验证管道,获取必要的信息,但我无法注销。这个问题的解决方法是什么?

当我在注销中单击“注销”时 我收到以下错误

NotAllowedToDisconnect at /tomonotomo/auth/disconnect/facebook/
No exception supplied
Request Method: GET
Request URL:    http://localhost:8000/tomonotomo/auth/disconnect/facebook/
Django Version: 1.5.1
Exception Type: NotAllowedToDisconnect
Exception Location: /tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/local/lib/python2.7/site-packages/social_auth/backends/__init__.py in disconnect, line 435
Python Executable:  /tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/bin/python2.7
Python Version: 2.7.3
Python Path:    
['/tmp/guest-onyOH9/pratik/tomonotomo_project',
 '/tmp/guest-onyOH9/Desktop/pycharm-2.7.3/helpers/pydev',
 '/tmp/guest-onyOH9/pratik/tomonotomo_project',
 '/tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/lib/python2.7',
 '/tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/lib/python2.7/plat-linux2',
 '/tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/lib/python2.7/lib-tk',
 '/tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/lib/python2.7/lib-old',
 '/tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/local/lib/python2.7/site-packages',
 '/tmp/guest-onyOH9/pratik/virtualenv-1.10/tomonotomo/lib/python2.7/site-packages']
Server time:    Sat, 10 Aug 2013 22:27:42 -0500

我的设置是这样的:

AUTHENTICATION_BACKENDS = (
    'social_auth.backends.facebook.FacebookBackend',
    'django.contrib.auth.backends.ModelBackend',
)

FACEBOOK_EXTENDED_PERMISSIONS= ['email', 'user_birthday']

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user',
    'social_auth.backends.pipeline.associate.associate_by_email',
    'social_auth.backends.pipeline.user.get_username',
    'social_auth.backends.pipeline.user.create_user',    

    'tomonotomo.social_auth_pipeline.create_custom_user',

    'social_auth.backends.pipeline.social.associate_user',
    'social_auth.backends.pipeline.user.update_user_details',
)

SOCIAL_AUTH_CREATE_USERS = True
SOCIAL_AUTH_FORCE_RANDOM_USERNAME = False
SOCIAL_AUTH_DEFAULT_USERNAME = 'socialauth_user'
SOCIAL_AUTH_ENABLED_BACKENDS = ('facebook',)
SOCIAL_AUTH_COMPLETE_URL_NAME = 'socialauth_complete'
SOCIAL_AUTH_ASSOCIATE_URL_NAME = 'socialauth_associate_complete'
SOCIAL_AUTH_ASSOCIATE_BY_EMAIL = True
SOCIAL_AUTH_ERROR_KEY = 'socialauth_error'
SOCIAL_AUTH_REDIRECT_IS_HTTPS = False

LOGIN_URL = '/tomonotomo/login/' 
LOGIN_REDIRECT_URL = '/tomonotomo/' 
LOGIN_ERROR_URL = '/tomonotomo/login-error/'

请帮忙。谢谢

我用来登录的代码是:

<a href="{% url "socialauth_begin" "facebook" %}" class="btn"><h3 style="color:white">Connect via Facebook</h3></a>

【问题讨论】:

  • 断开连接与注销不同,断开连接将删除与社交帐户和当前用户的关联。下次用户尝试使用 Facebook 帐户登录时,将在您的应用中创建一个新的用户实例。您应该使用 Django 中内置的注销机制(或实现类似的机制)。
  • 谢谢先生。这是有道理的。

标签: django facebook django-socialauth


【解决方案1】:

我只是有同样的问题,但使用 twitter。

产生此错误是因为用户没有其他方式连接/断开与系统的连接,并且 API 在某种程度上认为它会很危险。

解决问题的方法是调用示例中的自定义注销表单:

https://github.com/omab/django-social-auth/blob/master/example/app/views.py#L39

【讨论】:

  • 请包含示例内联,而不是链接到将来可能会更改的内容。
  • 请看上面@omab 的评论。为我解决了这个问题。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2018-01-29
相关资源
最近更新 更多