Deploying Streamlit-Authenticator via Streamlit Community Cloud

Hi @mkhorasani,

Firstly your component is a great contribution to the Streamlit community and I have enjoyed reading your (recently purchased!) book.

I have been able to successfully get your Streamlit-Authenticator app working locally by having a config.yml setup in my root directory. I use the example structure you have provided in your documentation, replacing the passwords with hashes with your hash encryptor.

However, I am unsure how I specify those same credentials when I go to deploy my app on Streamlit Community Cloud (as a private app) within the Secrets manager. I would rather not have my config.yml file hosted secretly on GitHub and would rather just specify those credentials in Secrets manager.

Can you (or anyone else really :blush:) please help me with the correct specification in Streamlit secrets manager?

My local config.yml file:

      name: Joe Bloggs
      password: #_some_hashed_password_@#@#41
  expiry_days: 0.5
  key: some_signature_key
  name: some_cookie_name

My current streamlit Secrets manager file (which doesn’t work);

[usernames] = "JoeBloggs"
[email] = ""
[name] ="Joe Bloggs"
[password]= "#_some_hashed_password_@#@#41"


[emails] = ""

Thanks in advance for any help given :raised_hand_with_fingers_splayed::raised_hand_with_fingers_splayed::+1:

1 Like

Try this method.


expiry_days = 1
key = "some_signature_key"
name = "some_cookie_name"

usernames = {dbaldwin = {email = "", name = "David Baldwin", password = "$2b$12$L035ey6vkdHW6523PDg24ezWgKB2mEeI7ARaonKcLoXNOg6wtCGc."}, jsmith = {email = "", name = "John Smith", password = "$2b$12$L035ey6vkdHW6523PDg24ezWgKB2mEeI7ARaonKcLoXNOg6wtCGc."}}

emails = [""]


authenticator = stauth.Authenticate(

Hey @C_Quang thank you for purchasing our book! I see that this question has already been answered above, so I just wanted to take this opportunity to say thank you.

Hi @ferdy thanks so much for your help - can’t wait to try this! Sorry for late reply :blush:

Hi @mkhorasani sorry for the late reply. I am really eager to try the solution @ferdy posted above. Do you know whether that solution would also work in other secrets management functions for other services .e.g like Render etc.?

BTW - I’m still making my way through your book. Great read and covers some really important material front end and back end.

Hi @ferdy I can confirm your answer works on Streamlit cloud! Thanks very much :raised_hand_with_fingers_splayed::raised_hand_with_fingers_splayed::raised_hand_with_fingers_splayed::raised_hand_with_fingers_splayed::+1::blush:

1 Like

Hey @C_Quang, I’m not sure about other services, but as long as such services can take a dictionary, then I can’t imagine it being a problem. And that’s great to hear that you’re enjoying the book, thank you so much for making the purchase!

1 Like

Would this approach also allow for the implementation of a “register user” functionality? Basically, is there a way to update the secrets as someone registers as a new user? Thanks!


I believe so, you would have to update the secrets file each time a new user registers.

I get a “TypeError: Secrets does not support item assignment.” error when I try to use secrets.toml instead of config.yaml (both in the .streamlit folder) for streamlit_authenticator. I’d appreciate any suggestions.

Don’t assign values to secrets’ items in the code.

thanks for your prompt response. I don’t believe i am assigning values to secrets’ items in the code. I copied the code directly from the Mar 2023 post in this topic. Here is the full error message:

TypeError: Secrets does not support item assignment.


File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/streamlit/runtime/scriptrunner/", line 534, in _run_script
    exec(code, module.__dict__)File "/Users/xxxxxxxxxxxl/Sites/ftr-stream/", line 110, in <module>
    authenticator = stauth.Authenticate(
                    ^^^^^^^^^^^^^^^^^^^^File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/streamlit_authenticator/", line 49, in __init__
    self.credentials['usernames'][username]['logged_in'] = False
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/streamlit/runtime/", line 105, in __setitem__
    raise TypeError("Secrets does not support item assignment.")


You need this


instead of this

1 Like

yeah! this worked perfectly for me