Streamlitを利用することで、簡単にデータアプリケーションを作成できますが、アプリケーションの保護やアクセス制限を行う場合、認証機能が必要になります。
その際に役立つライブラリがStreamlit Authenticatorで、簡単に認証機能を組み込むことができます。
Streamlit Authenticatorの基本的な使い方をまとめてみます。
Streamlit Authenticatorとは?
Streamlit Authenticatorは、ユーザー名とパスワードによる認証機能を簡単に追加できるライブラリです。
以下のような機能が実現できます。
- ログイン画面の作成
- パスワードのハッシュ化
- 認証済みユーザーのアクセス管理
- ユーザー登録やパスワードリセット機能
インストール
Streamlit AuthenticatorはPythonのライブラリとして提供されています。
以下のコマンドでインストールできます。
pip install streamlit-authenticator
基本的な使い方
簡単なログイン画面を作成する例を示します。
コード例
import streamlit as st
import streamlit_authenticator as stauth
# ユーザー情報の設定
names = ["Alice", "Bob"]
usernames = ["alice", "bob"]
passwords = ["password1", "password2"]
# パスワードをハッシュ化
hashed_passwords = stauth.Hasher(passwords).generate()
# 認証機能を初期化
authenticator = stauth.Authenticate(
names, usernames, hashed_passwords,
"some_cookie_name", "some_signature_key",
cookie_expiry_days=30
)
# ログインフォーム
data = authenticator.login("Login", "main")
if data['name']:
st.success(f"Welcome, {data['name']}!")
else:
st.warning("Please enter your username and password.")
コードのポイント
- ユーザー情報の設定
names
とusernames
でユーザー名を設定します。- パスワードは
passwords
リストに記載しますが、セキュリティ向上のため、必ずハッシュ化してください。
- パスワードのハッシュ化
stauth.Hasher
を使用してパスワードをハッシュ化します。- 平文でパスワードを保存しないように注意しましょう。
- 認証の実行
authenticator.login
でログインフォームを作成します。
ユーザー登録とパスワード変更
Streamlit Authenticatorでは、ユーザー登録やパスワード変更機能も提供されています。
ユーザー登録フォームの例
# 新規ユーザー登録フォーム
try:
if authenticator.register_user('Register user', preauthorization=False):
st.success('User registered successfully')
except Exception as e:
st.error(e)
パスワード変更フォームの例
# パスワード変更フォーム
try:
if authenticator.reset_password('Reset password', 'main'):
st.success('Password reset successfully')
except Exception as e:
st.error(e)
カスタマイズ
認証機能の見た目や挙動をカスタマイズすることも可能です。
ログインボタンのカスタマイズ
ログインボタンのラベルを変更する場合、以下のとおり記述します。
data = authenticator.login("Custom Login Label", "main")
Cookie設定の調整
クッキーの有効期限を設定する場合、以下のとおり記述します。
cookie_expiry_days=7 # 7日間有効
注意点とベストプラクティス
- パスワードのセキュリティ
- 平文のパスワードは避け、必ずハッシュ化しましょう。
- クッキーの使用
- クッキー名や署名キーは推測されにくい値を使用してください。
- ユーザー情報の管理
- ユーザー情報は安全に管理し、外部ファイルやデータベースで運用するのが望ましいです。
おわりに
Streamlit Authenticatorを使用することで、簡単に認証機能を実装できます。詳細は公式ドキュメントを参考にしてください。