Серверная часть Python, войдите через Facebook, ошибка: "Токен активного доступа должен быть использован для.."

Я хотел бы создать рабочую кнопку "Войти через Facebook". Есть много постов по этому вопросу, но я не могу найти один тат помогает.

Это ПОЧТИ работает. Я получаю недолговечный токен, чтобы вместе с идентификатором приложения и секретом клиента запросить токен доступа. И я также получаю маркер доступа обратно в JSON. Однако, когда я добавляю это так: " https://graph.facebook.com/v2.4/me?%s&fields=name,id,email token

Я боюсь

Активный токен доступа должен использоваться для запроса информации о текущем пользователе

Вот вывод (... = elipsis):

    short lived access token received 2Q ... 8ZD

    send request for long lived access token to: https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=1234 ... 3c8&fb_exchange_token=2Q ... 8ZD

result = h.request(url, 'GET')[1] was: {"access_token":"ABC ... MN","token_type":"bearer","expires_in":5174030}

    token is now: ABC...MN

    url sent for API access:https://graph.facebook.com/v2.4/me?ABC...Mn&fields=name,id,email

    API JSON result: {"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500,"fbtrace_id":"CQ8FmaVqTnl"}}

Это происходит из этого оригинального кода:

def fbconnect():
    """Connect to facebook."""
    if request.args.get('state') != login_session['state']:
        response = make_response(json.dumps('Invalid state parameter.'), 401)
        response.headers['Content-Type'] = 'application/json'
        return response
    access_token = request.data
    print "short lived access token received %s " % access_token

    app_id = json.loads(open('fb_client_secrets.json', 'r').read())[
        'web']['app_id']
    app_secret = json.loads(
        open('fb_client_secrets.json', 'r').read())['web']['app_secret']
    url = 'https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=%s&client_secret=%s&fb_exchange_token=%s' % (
        app_id, app_secret, access_token)
    print "send request for long lived access token to: "+url
    h = httplib2.Http()
    result = h.request(url, 'GET')[1]
    print "result = h.request(url, 'GET')[1] was: " + result
    token = json.loads(result)  # h.request(url, 'GET')[0]
    # print "token is now: " + token
    token = token['access_token']
    token = str(token)
    print "token is now: " + token
    # Use token to get user info from API
    # userinfo_url = "https://graph.facebook.com/v2.4/me"


    url = 'https://graph.facebook.com/v2.4/me?%s&fields=name,id,email' % token
    h = httplib2.Http()
    result = h.request(url, 'GET')[1]
    print "url sent for API access:%s" % url
    print "API JSON result: %s" % result
    data = json.loads(result)
    login_session['provider'] = 'facebook'
    login_session['username'] = data["name"]
    login_session['email'] = data["email"]
    login_session['facebook_id'] = data["id"]

0 ответов

Другие вопросы по тегам