FauziIsyrinApridal commited on
Commit
b17b0dd
·
1 Parent(s): d99d7ed
Files changed (2) hide show
  1. app/auth.py +39 -25
  2. requirements.txt +2 -1
app/auth.py CHANGED
@@ -2,6 +2,7 @@ import os
2
  import base64
3
  import streamlit as st
4
  from app.db import supabase
 
5
 
6
 
7
  def auth_view():
@@ -28,31 +29,44 @@ def auth_view():
28
  unsafe_allow_html=True
29
  )
30
 
31
- # --- FIX: Auto convert hash (#) to query (?) ---
32
- st.markdown(
33
- """
34
- <script>
35
- (function() {
36
- const hash = window.location.hash;
37
- if (hash && hash.length > 1 && !sessionStorage.getItem("hash_migrated")) {
38
- // ambil param setelah #
39
- const query = hash.substring(1);
40
- const newUrl = window.location.pathname + "?" + query;
41
-
42
- // tandai sudah migrasi supaya tidak infinite loop
43
- sessionStorage.setItem("hash_migrated", "true");
44
-
45
- // ganti URL tanpa hash
46
- window.history.replaceState(null, "", newUrl);
47
-
48
- // reload supaya Streamlit bisa baca query param
49
- window.location.reload();
50
- }
51
- })();
52
- </script>
53
- """,
54
- unsafe_allow_html=True
55
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
  # --- Recovery flow ---
58
  if hasattr(st, "query_params"):
 
2
  import base64
3
  import streamlit as st
4
  from app.db import supabase
5
+ from urllib.parse import parse_qsl
6
 
7
 
8
  def auth_view():
 
29
  unsafe_allow_html=True
30
  )
31
 
32
+ # --- FIX: Auto convert hash (#) to query (?) using streamlit-url-fragment ---
33
+ try:
34
+ from streamlit_url_fragment import get_fragment
35
+ fragment = get_fragment()
36
+
37
+ if fragment and not st.session_state.get("hash_migrated"):
38
+ # Parse fragment parameters
39
+ params = dict(parse_qsl(fragment))
40
+
41
+ if params.get("type") == "recovery" and params.get("access_token"):
42
+ # Set query params so existing recovery flow works
43
+ if hasattr(st, "query_params"):
44
+ for key, value in params.items():
45
+ st.query_params[key] = value
46
+ else:
47
+ st.experimental_set_query_params(**params)
48
+
49
+ st.session_state["hash_migrated"] = True
50
+ st.rerun()
51
+ except ImportError:
52
+ # Fallback to JS if library not available
53
+ st.markdown(
54
+ """
55
+ <script>
56
+ (function() {
57
+ const hash = window.location.hash;
58
+ if (hash && hash.length > 1 && !sessionStorage.getItem("hash_migrated")) {
59
+ const query = hash.substring(1);
60
+ const newUrl = window.location.pathname + "?" + query;
61
+ sessionStorage.setItem("hash_migrated", "true");
62
+ window.history.replaceState(null, "", newUrl);
63
+ window.location.reload();
64
+ }
65
+ })();
66
+ </script>
67
+ """,
68
+ unsafe_allow_html=True
69
+ )
70
 
71
  # --- Recovery flow ---
72
  if hasattr(st, "query_params"):
requirements.txt CHANGED
@@ -118,4 +118,5 @@ streamlit_mic_recorder
118
  gtts
119
  edge-tts
120
  playwright
121
- dotenv
 
 
118
  gtts
119
  edge-tts
120
  playwright
121
+ dotenv
122
+ streamlit-url-fragment