【问题标题】:Django Social Auth Partial Pipeline: AuthTokenErrorDjango Social Auth 部分管道:AuthTokenError
【发布时间】:2013-06-16 06:52:19
【问题描述】:

我正在尝试使用 Django Social Auth 实现 Twitter 登录。我添加了一个部分管道,我使用表单(DOB、电子邮件等)从用户那里收集额外的详细信息。

我的问题是如果用户已经存在,我想跳过这个管道。但是,当我尝试这样做时,我得到一个 AuthTokenError“令牌错误:缺少未经授权的令牌”,我无法弄清楚原因。

这是导致问题的代码:

def gather_extra_data(backend, details, uid, request, user=None, *args, **kwargs):
    social_user = UserSocialAuth.get_social_auth(backend.name, uid)

    if social_user:
        return redirect('socialauth_complete', backend.name)

    if not details.get('email'):
        if not request.session.get('saved_email'):
            return redirect(request_extra, backend=backend.name)
        else:
            details['email'] = request.session['saved_email']
            details['password'] = request.session['password']
            details['first_name'] = request.session['first_name']
            details['last_name'] = request.session['last_name']
            details['dob'] = request.session['dob']
            details['gender'] = request.session['gender']
            details['avatar_url'] = request.session['avatar_url']

【问题讨论】:

  • 请粘贴您的SOCIAL_AUTH_PIPELINE 设置。

标签: django django-socialauth


【解决方案1】:

您应该在创建用户并关联社交帐户之后(在social_auth.backends.pipeline.social.associate_user 条目之后)放置您的管道条目,然后您可以尝试使用此代码:

def gather_extra_data(social_auth, user, details, request, is_new=False, *args, **kwargs):
    if is_new:
        if request.session.get('saved_email') is None:
            return redirect(request_extra, backend=backend.name)
        else:
            details['email'] = request.session['saved_email']
            details['password'] = request.session['password']
            details['first_name'] = request.session['first_name']
            details['last_name'] = request.session['last_name']
            details['dob'] = request.session['dob']
            details['gender'] = request.session['gender']
            details['avatar_url'] = request.session['avatar_url']

记得在输入之前加上social_auth.backends.pipeline.misc.save_status_to_session

【讨论】:

    【解决方案2】:

    试试这个方法:

    def gather_extra_data(backend, details, uid, request, user=None, is_new=False, *args, **kwargs):
    
    If not user is None and is_new: #is_new is your missing argument.
        if not details.get('email'):
            if not request.session.get('saved_email'):
                return redirect(request_extra, backend=backend.name)
            else:
                details['email'] = request.session['saved_email']
                details['password'] = request.session['password']
                details['first_name'] = request.session['first_name']
                details['last_name'] = request.session['last_name']
                details['dob'] = request.session['dob']
                details['gender'] = request.session['gender']
                details['avatar_url'] = request.session['avatar_url']
    

    【讨论】:

    • 感谢您的回答。不幸的是,我遇到了同样的问题。我在重定向到 socialauth_complete 的第一个“if”中添加了一个 else 语句 - “return redirect('socialauth_complete', backend.name)”
    猜你喜欢
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多