[英]Python Social Auth NotAllowedToDisconnect at /disconnect/facebook/1/
[英]Python Social Auth, Extending Disconnect Pipeline
我有一個用戶配置文件表,它有 fb_id、tw_id。 所以我正在檢查用戶是否連接了他們的社交帳戶。 當用戶斷開其帳戶之一時,我需要更新這些列。
SOCIAL_AUTH_DISCONNECT_PIPELINE = (
'social.pipeline.disconnect.allowed_to_disconnect',
'social.pipeline.disconnect.get_entries',
'social.pipeline.disconnect.revoke_tokens',
'social.pipeline.disconnect.disconnect',
'profiles.utils.disconnect',
)
所以我在我的個人資料應用程序中添加了一個名為 disconnect 的函數,因為它在這里引用。
def disconnect(backend, user, response, *args, **kwargs):
if Profiles.objects.filter(user=user).exists():
if backend.name == 'facebook':
profile=Profiles.objects.get(user=user)
profile.fb_id = ''
profile.save()
if backend.name == 'twitter':
profile=Profiles.objects.get(user=user)
profile.tw_id = ''
profile.save()
if backend.name == 'instagram':
profile=Profiles.objects.get(user=user)
new_profile.in_id = ''
profile.save()
當我嘗試斷開我的帳戶時,我收到此錯誤:
TypeError at /disconnect/facebook/
disconnect() takes at least 3 arguments (2 given)
Request Method: POST
Request URL: /disconnect/facebook/
Django Version: 1.8.2
Exception Type: TypeError
Exception Value:
disconnect() takes at least 3 arguments (2 given)
這是我第一次使用 python_social_auth,任何幫助將不勝感激。
嘗試這個
SOCIAL_AUTH_DISCONNECT_PIPELINE = (
'social.pipeline.disconnect.allowed_to_disconnect',
'social.pipeline.disconnect.get_entries',
'social.pipeline.disconnect.revoke_tokens',
# 'social.pipeline.disconnect.disconnect', # comment
'profiles.utils.custom_pipeline',
)
custom_pipeline.py
def disconnect(strategy, entries, user_storage, *args, **kwargs):
for entry in entries:
user_storage.disconnect(entry)
backend = kwargs.get('name')
profile=Profiles.objects.get(user=entries[0].user)
if backend == 'facebook':
profile.fb_id = ''
elif backend == 'twitter':
profile.tw_id = ''
elif backend == 'instagram':
new_profile.in_id = ''
profile.save()
最好的!
我解決了這個問題:
SOCIAL_AUTH_DISCONNECT_PIPELINE = (
'social.pipeline.disconnect.allowed_to_disconnect',
'social.pipeline.disconnect.get_entries',
'social.pipeline.disconnect.revoke_tokens',
'social.pipeline.disconnect.disconnect',
'profiles.utils.disconnect',
)
並將函數修改為:
def disconnect(strategy, entries, *args, **kwargs):
backend = kwargs.get('name')
profile=Profiles.objects.get(user=entries[0].user)
if backend == 'facebook':
profile.fb_id = False
elif backend == 'twitter':
profile.tw_id = False
elif backend == 'instagram':
new_profile.in_id = False
profile.save()
現在它完美地工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.