Offline Access Facebook Apps (infinite session) in Appengine Webapp
// demonstrate how to get infinite session from facebook apps
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
import urllib
import facebook
FACEBOOK_API_KEY='..'
FACEBOOK_SECRET_KEY='..'
class FacebookPage(webapp.RequestHandler):
def get(self):
fb = Facebook(FACEBOOK_API_KEY, FACEBOOK_SECRET_KEY,
callback_path=self.request.path)
auth_token = self.request.get('auth_token')
#got auth_token, get temporary session
if auth_token:
try:
fb.auth_token = auth_token
fb.auth.getSession()
except:
self.redirect(fb.get_login_url(next=self.request.url, canvas=False))
else:
#not authenticated yet, redirect to facebook login URL
return self.redirect(fb.get_login_url(next=self.request.url, canvas=False))
#now we have a live session
#we can get her basic info
user_info = self.facebook.users.getInfo([self.facebook.uid], ['name', 'pic_square'])[0]
#check for offline access permission
permission_link = None
if not self.facebook.users.hasAppPermission('offline_access'):
params = {
'api_key':FACEBOOK_API_KEY,
'ext_perm':'offline_access,status_update,read_stream',
'next':self.request.url,
'cancel':self.request.url,
}
permission_link = "http://www.facebook.com/connect/prompt_permissions.php?%s" % urllib.urlencode(params)
else:
#got permission, save her session for future use
if fb.session_key_expires == 0:
user = User(uid=fb.uid, session_key=fb.session_key)
user.put()
self.response.out.write(template.render(
'facebook_page.html', {
'permission_link':permission_link,
'user_info':user_info})