Get_query_params() not working with '#' instead of '?'

I am trying to integrate the Streamlit frontend with a Supabase backend. The great thing is that I can build upon the user sign_up, password_recovery, etc. logic already build into Supabase. This requires me to read the URL of the Streamlit report and check all parameters. Supabase uses a # sign behind its confirmation URL.

<SITE_URL>#access_token=x&refresh_token=y&expires_in=z&token_type=bearer&type=recovery

See also:

Unfortunately the get_query_params() function does not parse this url into a correct query_string. The query_string only works with a ? as separator. Is there some workaround for this issue? Or could get_query_params() be updated to work with a # as separator?

get_query_params() only uses data available to the server. I’m trying to use Supabase too, I’ll try releasing some useful bits soon.

Ok, so the first bit is here: streamlit-url-fragment · PyPI - this should allow you to read data from the # fragment:

from streamlit_url_fragment import get_fragment

fragment = get_fragment()
if fragment is None:
    st.stop()
if fragment:
    params = dict(urllib.parse.parse_qsl(fragment.removeprefix('#')))

    ... # do all the parsing/handling you need

    st.experimental_set_query_params()  # clear the #fragment in URL
3 Likes

Lets unify these efforts. Enable control over URL subdirectories in addition to query parameters · Issue #1970 · streamlit/streamlit · GitHub