11"""Python Flask WebApp Auth0 integration example
22"""
3- from functools import wraps
4- from six .moves .urllib .parse import urlencode
53from os import environ as env
64from dotenv import load_dotenv , find_dotenv
75from flask import Flask
8- from flask import redirect
96from flask import render_template
107from flask import request
11- from flask import session
12- from flask import url_for
138from flask_oauthlib .client import OAuth
149
1510import constants
4136 authorize_url = '/authorize' ,
4237)
4338
44- def requires_auth (f ):
45- @wraps (f )
46- def decorated (* args , ** kwargs ):
47- if constants .PROFILE_KEY not in session :
48- return redirect ('/' )
49- return f (* args , ** kwargs )
50- return decorated
51-
5239
5340# Controllers API
5441@APP .route ('/' )
5542def home ():
56- if constants .PROFILE_KEY in session :
57- return redirect (url_for ('dashboard' ))
58-
5943 return render_template ('home.html' , env = env )
6044
6145
62- @APP .route ('/dashboard' )
63- @requires_auth
64- def dashboard ():
65- return render_template ('dashboard.html' ,
66- user = session [constants .PROFILE_KEY ], env = env )
67-
68- @APP .route ('/logout' )
69- def logout ():
70- session .clear ()
71- params = {'returnTo' : url_for ('home' , _external = True ), 'client_id' : AUTH0_CLIENT_ID }
72- return redirect (auth0 .base_url + '/v2/logout?' + urlencode (params ))
73-
74-
7546@APP .route ('/callback' )
7647def callback_handling ():
7748 resp = auth0 .authorized_response ()
@@ -81,23 +52,13 @@ def callback_handling():
8152 request .args ['error_description' ]
8253 )
8354
84- session ['access_token' ] = (resp ['access_token' ], '' )
85-
86- user_info = auth0 .get ('userinfo' )
87- session [constants .PROFILE_KEY ] = user_info .data
88-
89- return redirect ('/dashboard' )
55+ return render_template ('dashboard.html' )
9056
9157
9258@APP .route ('/login' )
9359def login ():
9460 return auth0 .authorize (callback = AUTH0_CALLBACK_URL )
9561
9662
97- @auth0 .tokengetter
98- def get_auth0_oauth_token ():
99- return session .get ('access_token' )
100-
101-
10263if __name__ == "__main__" :
10364 APP .run (host = '0.0.0.0' , port = env .get ('PORT' , 3000 ))
0 commit comments