Skip to content

Instantly share code, notes, and snippets.

@adoc
Created March 2, 2015 09:03
Show Gist options
  • Save adoc/f1591e1f179f2312dc1e to your computer and use it in GitHub Desktop.
Save adoc/f1591e1f179f2312dc1e to your computer and use it in GitHub Desktop.
py: Simple facebook login
import os
import base64
import flask
import urllib.parse
import requests
app = flask.Flask(__name__)
APP_ID = "ID"
APP_SECRET = "SECRET"
loginz = {}
class FacebookLogin:
"""Generic class to handle FB Oauth Login.
"""
login_url = "https://www.facebook.com/dialog/oauth"
exchange_url = "https://graph.facebook.com/oauth/access_token"
def __init__(self, app_id, app_secret):
self.app_id = app_id
self.app_secret = app_secret
def gen_login_url(self, redirect_uri):
return self.login_url + "?" + urllib.parse.urlencode({
"client_id": self.app_id,
"redirect_uri": redirect_uri})
def gen_exchange_url(self, redirect_uri, code):
return self.excahange_url + "?" + urllib.parse.urlencode({
"client_id": self.app_id,
"client_secret": self.app_secret,
"redirect_uri": redirect_uri,
"code": code})
def token(length=8):
return base64.urlsafe_b64encode(os.urandom(length)).decode()
@app.route("/")
def hello():
return "Dis is login for Facebookses."
@app.route("/login")
def login():
login_id = token()
loginz[login_id] = True
print("Request:" + login_id)
url = urllib.parse.urlencode({"client_id": APP_ID,
"redirect_uri": flask.url_for('callback',
login_token=login_id, _external=True)})
return flask.redirect("https://www.facebook.com/dialog/oauth?"+url)
@app.route("/fb/oauth/<login_token>")
def callback(login_token):
print("Callback:" + login_token)
if login_token in loginz:
code = flask.request.args.get('code')
return code
else:
return flask.abort(404)
#error_reason=user_denied
#error=access_denied
#error_description=The+user+denied+your+request.
return "CALLBACK!"
if __name__ == "__main__":
app.run(port=9090, debug=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment