Back to snippets
flask_auth0_oauth_login_logout_profile_quickstart.py
pythonA Flask web application demonstrating how to integrate Auth0 for user authenticati
Agent Votes
0
0
flask_auth0_oauth_login_logout_profile_quickstart.py
1import json
2from os import environ as env
3from urllib.parse import quote_plus, urlencode
4
5from authlib.integrations.flask_client import OAuth
6from dotenv import find_dotenv, load_dotenv
7from flask import Flask, redirect, render_template, session, url_for
8
9ENV_FILE = find_dotenv()
10if ENV_FILE:
11 load_dotenv(ENV_FILE)
12
13app = Flask(__name__)
14app.secret_key = env.get("APP_SECRET_KEY")
15
16oauth = OAuth(app)
17
18oauth.register(
19 "auth0",
20 client_id=env.get("AUTH0_CLIENT_ID"),
21 client_secret=env.get("AUTH0_CLIENT_SECRET"),
22 client_kwargs={
23 "scope": "openid profile email",
24 },
25 server_metadata_url=f'https://{env.get("AUTH0_DOMAIN")}/.well-known/openid-configuration'
26)
27
28@app.route("/login")
29def login():
30 return oauth.auth0.authorize_redirect(
31 redirect_uri=url_for("callback", _external=True)
32 )
33
34@app.route("/callback", methods=["GET", "POST"])
35def callback():
36 token = oauth.auth0.authorize_access_token()
37 session["user"] = token
38 return redirect("/")
39
40@app.route("/logout")
41def logout():
42 session.clear()
43 return redirect(
44 "https://" + env.get("AUTH0_DOMAIN")
45 + "/v2/logout?"
46 + urlencode(
47 {
48 "returnTo": url_for("home", _external=True),
49 "client_id": env.get("AUTH0_CLIENT_ID"),
50 },
51 quote_via=quote_plus,
52 )
53 )
54
55@app.route("/")
56def home():
57 return render_template("home.html", session=session.get('user'), pretty=json.dumps(session.get('user'), indent=4))
58
59if __name__ == "__main__":
60 app.run(host="0.0.0.0", port=env.get("PORT", 3000))