Vinayak221's picture
Update app.py
769f727 verified
raw
history blame
1.54 kB
# app.py
from shiny import App, render, ui
from shiny.flask import FlaskApp
from flask import Flask, redirect, url_for, session, request
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.secret_key = 'your_secret_key'
oauth = OAuth(app)
google = oauth.register(
name='google',
client_id='your_client_id',
client_secret='your_client_secret',
authorize_url='https://accounts.google.com/o/oauth2/auth',
authorize_params=None,
authorize_params={'scope': 'openid email profile'},
access_token_url='https://accounts.google.com/o/oauth2/token',
access_token_params=None,
refresh_token_url=None,
client_kwargs={'scope': 'openid email profile'},
)
@app.route('/login')
def login():
redirect_uri = url_for('authorize', _external=True)
return google.authorize_redirect(redirect_uri)
@app.route('/authorize')
def authorize():
token = google.authorize_access_token()
user = google.parse_id_token(token)
session['user'] = user
return redirect(url_for('index'))
@app.route('/logout')
def logout():
del session['user']
return redirect(url_for('index'))
@app.route('/')
def index():
user = session.get('user')
if user:
username = user['name']
else:
username = "Guest"
return f'Hello, {username}!'
# Embed Flask app within shiny-python
shiny_app = App(
ui.page(ui.title("Google OAuth Example")),
render.FlexDashboard("flex_dashboard", title="Google OAuth Example"),
FlaskApp(app)
)
shiny_app.serve()