Spaces:
Runtime error
Runtime error
# 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'}, | |
) | |
def login(): | |
redirect_uri = url_for('authorize', _external=True) | |
return google.authorize_redirect(redirect_uri) | |
def authorize(): | |
token = google.authorize_access_token() | |
user = google.parse_id_token(token) | |
session['user'] = user | |
return redirect(url_for('index')) | |
def logout(): | |
del session['user'] | |
return redirect(url_for('index')) | |
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() | |