· 7 years ago · Jul 18, 2018, 11:08 PM
1from flask import Flask, redirect, url_for, session
2from flask_oauth import OAuth
3
4
5# You must configure these 3 values from Google APIs console
6# https://code.google.com/apis/console
7GOOGLE_CLIENT_ID = '363780643946-ecdviq7gddkgtd6t291c7g2edfurdg0h.apps.googleusercontent.com'
8GOOGLE_CLIENT_SECRET = 'eHeUwKymWKSUHbkY1OKamJPm'
9REDIRECT_URI = '/oauth2callback' # one of the Redirect URIs from Google APIs console
10
11SECRET_KEY = 'development key'
12DEBUG = True
13
14app = Flask(__name__)
15app.debug = DEBUG
16app.secret_key = SECRET_KEY
17oauth = OAuth()
18
19google = oauth.remote_app('google',
20 base_url='https://www.google.com/accounts/',
21 authorize_url='https://accounts.google.com/o/oauth2/auth',
22 request_token_url=None,
23 request_token_params={'scope': 'https://www.googleapis.com/auth/userinfo.email',
24 'response_type': 'code'},
25 access_token_url='https://accounts.google.com/o/oauth2/token',
26 access_token_method='POST',
27 access_token_params={'grant_type': 'authorization_code'},
28 consumer_key=GOOGLE_CLIENT_ID,
29 consumer_secret=GOOGLE_CLIENT_SECRET)
30
31@app.route('/')
32def index():
33 access_token = session.get('access_token')
34 if access_token is None:
35 return redirect(url_for('login'))
36
37 access_token = access_token[0]
38 from urllib2 import Request, urlopen, URLError
39
40 headers = {'Authorization': 'OAuth '+access_token}
41 req = Request('https://www.googleapis.com/oauth2/v1/userinfo',
42 None, headers)
43 try:
44 res = urlopen(req)
45 print req
46
47 except URLError, e:
48 if e.code == 401:
49 # Unauthorized - bad token
50 session.pop('access_token', None)
51 return redirect(url_for('login'))
52 return res.read()
53
54 return res.read()
55
56
57@app.route('/login')
58def login():
59 callback=url_for('authorized', _external=True)
60 return google.authorize(callback=callback)
61
62
63
64@app.route(REDIRECT_URI)
65@google.authorized_handler
66def authorized(resp):
67 access_token = resp['access_token']
68 session['access_token'] = access_token, ''
69 return redirect(url_for('index'))
70
71
72@google.tokengetter
73def get_access_token():
74 return session.get('access_token')
75
76
77def main():
78 app.run()
79
80
81if __name__ == '__main__':
82 main()