簡體   English   中英

Python Social Auth,擴展斷開管道

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM