Серверная часть 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"]