0

私はすでにこれを以前にテストしましたが、うまくいきました。エラーが再び発生し、ソーシャルアプリに変更を加えませんでした。

ここに私のコードがあります:

def get_profile(request, token=None):
    args = {
        'client_id': settings.FACEBOOK_APP_ID,
        'client_secret': settings.FACEBOOK_APP_SECRET,
        'redirect_uri': request.build_absolute_uri(reverse('social:fb_callback')),
        'code': token,
    }

    target = urllib.urlopen('https://graph.facebook.com/oauth/access_token?' + urllib.urlencode(args)).read()
    response = cgi.parse_qs(target)
    access_token = response['access_token'][-1]

    return access_token 
4

1 に答える 1

1

明らかに、リクエストは成功せず、レスポンスにはアクセス トークンがありません。Facebook のドキュメントによると、リクエストが適切でない場合、次のようなエラー要素を含むレスポンスが返されます。

{
  error: {
    message: "Missing redirect_uri parameter.",
    type: "OAuthException",
    code: 191
  }
}

したがって、関数では、次のようなことを行う必要があります。

class FacebookAccessException(Exception): pass

def get_profile(request, token=None):
    ...
    response = json.loads(urllib_response)
    if 'error' in response:
        raise FacebookAccessException(response['error']['message'])

    access_token = response['access_token'][-1]
    return access_token 

PS:

より良い urllib を使用してみてください。Requestsを試す必要があります。

于 2013-02-27T02:21:57.613 に答える