· Guides  · 4 min read

Streamlit ve Firebase Auth: Güvenli ve Merkezi Oturum Yönetimi

A comprehensive guide to choosing the right documentation platform and creating an effective documentation strategy.

A comprehensive guide to choosing the right documentation platform and creating an effective documentation strategy.

Streamlit Firebase Authentication

Web uygulamalarında kullanıcı oturum yönetimi kritik bir konudur. Streamlit, hızlı ve etkileşimli uygulamalar geliştirmek için harika bir araç olsa da, oturum yönetimi için sunduğu session_state yaklaşımı bazı kısıtlamalara sahiptir.

Bu yazıda, Streamlit uygulamalarında Firebase Auth ile token tabanlı oturum yönetiminin nasıl daha güvenli, tutarlı ve ölçeklenebilir bir çözüm sunduğunu inceleyeceğiz. Ayrıca Clerk ile entegre authentication, Pydantic ile veri validasyonu ve Firecrawler ile web content extract örneği de paylaşacağım.

Neden Firebase Token Tabanlı Yaklaşım?

Streamlit’in session_state mekanizması basit projeler için yeterli olabilir, ancak sayfa yenileme, sekmeler arası senkronizasyon ve güvenlik açısından bazı dezavantajlar içerir. Firebase token kullanımı bu sorunları nasıl çözüyor, birlikte bakalım.

1️⃣ Merkezi Veri Yönetimi

Firebase’de tüm oturum bilgileri merkezi olarak saklanır. Kullanıcı oturumları, sunucuda değil, Firebase Authentication hizmeti üzerinde tutulur. Veri tutarlılığı ve yönetimi kolaylaşır.

2️⃣ Güçlü Oturum Güvenliği

Firebase token’lar şifrelenmiş ve güvenli bir şekilde saklanır. Her oturum, benzersiz bir token ile takip edilir. Kullanıcı oturumları Firebase üzerinden yönetilebilir ve sonlandırılabilir.

3️⃣ Sayfa Yenileme ve Sekme Sorunlarını Çözme

session_state mekanizması, sayfa yenilendiğinde veya farklı sekmeler açıldığında oturum bilgisini kaybeder. Firebase token her zaman güncel ve bağımsız çalışır, böylece kullanıcı tekrar giriş yapmak zorunda kalmaz.

4️⃣ Ölçeklenebilirlik Avantajı

Streamlit uygulaması büyüdükçe session_state yönetimi zorlaşır. Firebase tabanlı oturum yönetimi, birden fazla Streamlit instance’ı ile uyumludur. Mikroservis mimarisi ile kolayca entegre edilebilir.

5️⃣ Daha Kolay Hata Ayıklama

Firebase’de oturum geçmişi saklanabilir. Kullanıcı giriş-çıkış kayıtları takip edilebilir. Sorun oluştuğunda hata ayıklamak çok daha kolaydır.

Firebase Token ile Oturum Yönetimi Nasıl Yapılır?

Aşağıdaki adımlarla Firebase token yönetimini Streamlit ile entegre edebiliriz:

Firebase Authentication’ı Ayarlayın

Firebase konsolunda yeni bir proje oluşturun. Authentication sekmesinden E-posta/Şifre tabanlı giriş özelliğini etkinleştirin.

Streamlit Uygulamasında Firebase SDK’yı Kullanın

firebase-admin kütüphanesini yükleyin:

pip install firebase-admin

Firebase hizmet hesabı anahtarınızı projenize ekleyin.

Firebase Token ile Kullanıcı Doğrulaması Yapın

Kullanıcı giriş yaptıktan sonra, Firebase tarafından verilen JWT token’ı saklayın. Her sayfa yüklemesinde Firebase’den token doğrulaması yaparak oturumu yönetin.

Oturum ve Çıkış İşlemlerini Yönetin

Firebase’de oturum açan kullanıcının token’ını doğrulayın. Kullanıcı çıkış yaptığında token’ı temizleyerek oturumu sonlandırın.

Clerk ile Entegre Authentication

Clerk, modern web uygulamalarında kullanıcı oturum yönetimi için eksiksiz bir çözümdür. Streamlit ile Clerk’ı entegre ederek daha profesyonel bir kullanıcı yönetimi sistemi oluşturabiliriz.

import streamlit as st
from clerk import Clerk

# Clerk configuration
clerk = Clerk(
    publishable_key="your_publishable_key",
    secret_key="your_secret_key",
    api_host="https://api.clerk.dev"
)

# User authentication
user = clerk.user.read()
if not user:
    st.error("Lütfen giriş yapınız!")
else:
    st.success(f"Merhaba {user.username}!")

Pydantic ile Veri Validasyonu

Pydantic, veri validasyonu ve yapılandırma için güçlü bir araçtır. Streamlit form verilerini Pydantic modelleriyle doğrulayarak hataları önleyebiliriz.

from pydantic import BaseModel

class UserForm(BaseModel):
    name: str
    email: str

form = st.form("user_form")
form_data = form.dict()

if form.is_submitted():
    try:
        validated_data = UserForm(**form_data)
        st.success("Form doğrulandı!")
    except Exception as e:
        st.error(f"Doğrulama hatası: {str(e)}")

Firecrawler ile Web Content Extract

Firecrawler, web içeriğini analiz etmek ve extracted etmek için ideal bir araçtır. Streamlit uygulamamızda Firecrawler’ı kullanarak kullanıcıya daha zengin içerikler sunabiliriz.

from firecrawler import Crawler

crawler = Crawler()
content = crawler.extract_from_url("https://example.com")
st.write(content)

Brave Search ile Web Araması

Brave Search API’sini kullanarak uygulamamızda web araması功能i ekleyebiliriz.

import requests

def search_brave(query):
    api_key = "your_api_key"
    url = f"https://api.brave.so/v1/search?q={query}&api_key={api_key}"
    response = requests.get(url)
    return response.json()

search_query = st.text_input("Arama yapın...")
if search_query:
    results = search_brave(search_query)
    st.write(results)

Use Case: Tam Entegre Uygulama

Aşağıda, Streamlit + Firebase + Clerk + Pydantic entegrasyonunun tam bir örneğini bulabilirsiniz:

import streamlit as st
import firebase_admin
from firebase_admin import auth
from clerk import Clerk
from pydantic import BaseModel

# Firebase configuration
cred = credentials.Certificate("firebase_service_account.json")
firebase_admin.initialize_app(cred)

# Clerk configuration
clerk = Clerk(
    publishable_key="your_publishable_key",
    secret_key="your_secret_key",
    api_host="https://api.clerk.dev"
)

class UserForm(BaseModel):
    name: str
    email: str

# Authentication flow
def main():
    st.title("Streamlit Firebase Auth Example")
    
    if not st.session_state.get("user"):
        # Giriş formu
        form = st.form("login_form")
        email = form.text_input("Email")
        password = form.text_input("Şifre", type="password")
        
        if form.form_submit_button("Giriş Yap"):
            try:
                user = auth.get_user_by_email(email)
                token = auth.create_custom_token(user.uid)
                st.session_state["user_token"] = token
                st.success("Giriş başarılı!")
            except Exception as e:
                st.error(f"Hata: {str(e)}")
    else:
        # Kullanıcı bilgisi
        user_info = clerk.user.read()
        st.write(f"Merhaba {user_info.username}!")
        
        # Form örneği
        form = st.form("user_form")
        form_data = form.dict()
        
        if form.is_submitted():
            try:
                validated_data = UserForm(**form_data)
                st.success("Form doğrulandı!")
            except Exception as e:
                st.error(f"Doğrulama hatası: {str(e)}")
                
        # Çıkış butonu
        if st.button("Çıkış Yap"):
            st.session_state.pop("user_token", None)
            st.success("Başarıyla çıkış yapıldı!")

if __name__ == "__main__":
    main()

Bu örnek, Streamlit uygulamasında Firebase Authentication, Clerk, Pydantic ve Brave Search’ın nasıl entegre edileceğini göstermektedir. Ayrıntılı kod örnekleri ve açıklamalar, kullanıcıların kendi uygulamalarını oluşturmasına yardımcı olacaktır.

Siz de deneyimlerinizi paylaşın! Streamlit ve Firebase’i birlikte kullanıyor musunuz? Yorumlarınızı bekliyorum! 🚀

Back to Blog

Related Posts

View All Posts »