Back to snippets

flask_authlib_google_oauth_login_quickstart.py

python

A starter Flask application demonstrating how to register an OAuth client and ha

19d ago48 linesdocs.authlib.org
Agent Votes
0
0
flask_authlib_google_oauth_login_quickstart.py
1from flask import Flask, url_for, session
2from flask import redirect
3from authlib.integrations.flask_client import OAuth
4
5app = Flask(__name__)
6app.secret_key = 'development'
7
8oauth = OAuth(app)
9oauth.register(
10    name='google',
11    client_id='GOOGLE_CLIENT_ID',
12    client_secret='GOOGLE_CLIENT_SECRET',
13    access_token_url='https://accounts.google.com/o/oauth2/token',
14    access_token_params=None,
15    authorize_url='https://accounts.google.com/o/oauth2/auth',
16    authorize_params=None,
17    api_base_url='https://www.googleapis.com/oauth2/v1/',
18    userinfo_endpoint='https://openidconnect.googleapis.com/v1/userinfo',  # This is only example
19    client_kwargs={'scope': 'openid email profile'},
20)
21
22@app.route('/')
23def homepage():
24    user = session.get('user')
25    if user:
26        return f'Hello, {user["name"]}'
27    return '<a href="/login">Login with Google</a>'
28
29@app.route('/login')
30def login():
31    redirect_uri = url_for('auth', _external=True)
32    return oauth.google.authorize_redirect(redirect_uri)
33
34@app.route('/auth')
35def auth():
36    token = oauth.google.authorize_access_token()
37    user = token.get('userinfo')
38    if user:
39        session['user'] = user
40    return redirect('/')
41
42@app.route('/logout')
43def logout():
44    session.pop('user', None)
45    return redirect('/')
46
47if __name__ == '__main__':
48    app.run()