sandbox / app2.py
justinxzhao's picture
Some refactoring, judging responses for direct assessment.
577870e
raw
history blame
1.63 kB
import os
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
import streamlit as st
import webbrowser
redirect_uri = os.environ.get("REDIRECT_URI", "http://localhost:8502/")
def auth_flow():
st.write("Welcome to My App!")
auth_code = st.query_params.get("code")
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
"client_secret.json", # replace with you json credentials from your google auth app
scopes=["https://www.googleapis.com/auth/userinfo.email", "openid"],
redirect_uri=redirect_uri,
)
if auth_code:
flow.fetch_token(code=auth_code)
credentials = flow.credentials
st.write("Login Done")
user_info_service = build(
serviceName="oauth2",
version="v2",
credentials=credentials,
)
user_info = user_info_service.userinfo().get().execute()
assert user_info.get("email"), "Email not found in infos"
st.session_state["google_auth_code"] = auth_code
st.session_state["user_info"] = user_info
else:
if st.button("Sign in with Google"):
authorization_url, state = flow.authorization_url(
access_type="offline",
include_granted_scopes="true",
)
webbrowser.open_new_tab(authorization_url)
def main():
if "google_auth_code" not in st.session_state:
auth_flow()
if "google_auth_code" in st.session_state:
email = st.session_state["user_info"].get("email")
st.write(f"Hello {email}")
if __name__ == "__main__":
main()