Permalink
Browse files

Google OAuth2 example

  • Loading branch information...
1 parent eb35fb0 commit e3df26ba09f7d5a2263f570464e4b903983da018 @mete0r mete0r committed Jun 12, 2012
Showing with 76 additions and 0 deletions.
  1. +76 −0 example/google.py
View
@@ -0,0 +1,76 @@
+from flask import Flask, redirect, url_for, session
+from flaskext.oauth import OAuth
+
+
+# You must configure these 3 values from Google APIs console
+# https://code.google.com/apis/console
+GOOGLE_CLIENT_ID = '<Client-ID>'
+GOOGLE_CLIENT_SECRET = '<Client-secret>'
+REDIRECT_URI = '/authorized' # one of the Redirect URIs from Google APIs console
+
+SECRET_KEY = 'development key'
+DEBUG = True
+
+app = Flask(__name__)
+app.debug = DEBUG
+app.secret_key = SECRET_KEY
+oauth = OAuth()
+
+google = oauth.remote_app('google',
+ base_url='https://www.google.com/accounts/',
+ authorize_url='https://accounts.google.com/o/oauth2/auth',
+ request_token_url=None,
+ request_token_params={'scope': 'https://www.googleapis.com/auth/userinfo.email',
+ 'response_type': 'code'},
+ access_token_url='https://accounts.google.com/o/oauth2/token',
+ access_token_method='POST',
+ access_token_params={'grant_type': 'authorization_code'},
+ consumer_key=GOOGLE_CLIENT_ID,
+ consumer_secret=GOOGLE_CLIENT_SECRET)
+
+@app.route('/')
+def index():
+ access_token = session.get('access_token')
+ if access_token is None:
+ return redirect(url_for('login'))
+
+ access_token = access_token[0]
+ from urllib2 import Request, urlopen, URLError
+
+ headers = {'Authorization': 'OAuth '+access_token}
+ req = Request('https://www.googleapis.com/oauth2/v1/userinfo',
+ None, headers)
+ try:
+ res = urlopen(req)
+ except URLError:
+ return res.read()
+
+ return res.read()
+
+
+@app.route('/login')
+def login():
+ callback=url_for('authorized', _external=True)
+ return google.authorize(callback=callback)
+
+
+
+@app.route(REDIRECT_URI)
+@google.authorized_handler
+def authorized(resp):
+ access_token = resp['access_token']
+ session['access_token'] = access_token, ''
+ return redirect(url_for('index'))
+
+
+@google.tokengetter
+def get_access_token():
+ return session.get('access_token')
+
+
+def main():
+ app.run()
+
+
+if __name__ == '__main__':
+ main()

0 comments on commit e3df26b

Please sign in to comment.