0

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']
4

2 に答える 2

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でください。

于 2013-06-16T17:23:10.507 に答える
0

この方法を試してください:

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']
于 2013-06-16T09:07:19.000 に答える