How to extend facebook access token in python

2020-05-28 23:48发布

I am using the Python facebook-sdk client library. I currently have a short-lived access token obtained from https://developers.facebook.com/tools/accesstoken/ that I copy the code from the site into my code for authentication.

       graph = facebook.GraphAPI(access_token)

This token however expires after 60-mins. I am looking to extend this to a 60 day-long lived token so that don't need to manually copy in new every time it expires. I can find numerous answers on how to do this in different formats, however not python (or at least not simply without log in page etc.).

[for reference, the code I will be using is only intended for my use, and as such, I am not looking to create a log in page. I just want to be able to extend the token I already have].

3条回答
Fickle 薄情
2楼-- · 2020-05-29 00:18

According to their subsection on extending short lived client tokens, you'll need to take in your short lived client token and, having filled in the relevant app data, send a GET request from your server to the following endpoint:

GET /oauth/access_token?  
  grant_type=fb_exchange_token&           
  client_id={app-id}&
  client_secret={app-secret}&
  fb_exchange_token={short-lived-token}

The response will contain your long-lived access token which can then be passed back to the client or used on your server. If you don't currently have a module for performing HTTP operations, I highly recommend Requests.

查看更多
地球回转人心会变
3楼-- · 2020-05-29 00:22

here's an edited version , compatible with latest api versions:

import requests
import json
access_token = 'your token'     # Obtained from https://developers.facebook.com/tools/accesstoken/
app_id = "your app id"          # Obtained from https://developers.facebook.com/        
client_secret = "app secret"    # Obtained from https://developers.facebook.com/

link = "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=" + app_id +"&client_secret=" + client_secret + "&fb_exchange_token=" + access_token
s = requests.Session()
token = s.get(link).content
token=json.loads(token)
token=token.get('access_token')

print token
查看更多
Evening l夕情丶
4楼-- · 2020-05-29 00:28

Not sure if this was available in python's FB API when the question was originally asked, but a neater approach to extend the expiry of the access token would be:

graph = facebook.GraphAPI(user_short_lived_token_from_client)
app_id = 'app_id' # Obtained from https://developers.facebook.com/
app_secret = 'app_secret' # Obtained from https://developers.facebook.com/

# Extend the expiration time of a valid OAuth access token.
extended_token = graph.extend_access_token(app_id, app_secret)
print extended_token #verify that it expires in 60 days
查看更多
登录 后发表回答