Files
fastapi/docs/tr/docs/tutorial/security/get-current-user.md
2026-01-31 19:22:34 +00:00

4.4 KiB
Raw Blame History

Mevcut Kullanıcıyı Alma

Önceki bölümde güvenlik sistemi (dependency injection sistemine dayanır) path operation function'a str olarak bir token veriyordu:

{* ../../docs_src/security/tutorial001_an_py39.py hl[12] *}

Ancak bu hâlâ pek kullanışlı değil.

Bize mevcut kullanıcıyı verecek şekilde düzenleyelim.

Bir kullanıcı modeli oluşturun

Önce bir Pydantic kullanıcı modeli oluşturalım.

Body'leri bildirmek için Pydantic'i nasıl kullanıyorsak, aynı şekilde onu başka her yerde de kullanabiliriz:

{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:6] *}

get_current_user dependency'si oluşturun

Bir get_current_user dependency'si oluşturalım.

Dependency'lerin alt dependency'leri olabileceğini hatırlıyor musunuz?

get_current_user, daha önce oluşturduğumuz oauth2_scheme ile aynı dependency'yi kullanacak.

Daha önce path operation içinde doğrudan yaptığımız gibi, yeni dependency'miz get_current_user, alt dependency olan oauth2_scheme üzerinden str olarak bir token alacak:

{* ../../docs_src/security/tutorial002_an_py310.py hl[25] *}

Kullanıcıyı alın

get_current_user, oluşturduğumuz (sahte) bir yardımcı (utility) fonksiyonu kullanacak; bu fonksiyon str olarak bir token alır ve Pydantic User modelimizi döndürür:

{* ../../docs_src/security/tutorial002_an_py310.py hl[19:22,26:27] *}

Mevcut kullanıcıyı enjekte edin

Artık path operation içinde get_current_user ile aynı Depends yaklaşımını kullanabiliriz:

{* ../../docs_src/security/tutorial002_an_py310.py hl[31] *}

current_user tipini Pydantic User modeli olarak belirttiğimize dikkat edin.

Bu sayede fonksiyonun içinde otomatik tamamlama ve tip kontrollerinin tamamından faydalanırız.

/// tip | İpucu

Request body'lerinin de Pydantic modelleri ile bildirildiğini hatırlıyor olabilirsiniz.

Burada Depends kullandığınız için FastAPI karışıklık yaşamaz.

///

/// check | Ek bilgi

Bu dependency sisteminin tasarımı, hepsi User modeli döndüren farklı dependency'lere (farklı "dependable"lara) sahip olmamıza izin verir.

Bu tipte veri döndürebilen yalnızca tek bir dependency ile sınırlı değiliz.

///

Diğer modeller

Artık path operation function içinde mevcut kullanıcıyı doğrudan alabilir ve güvenlik mekanizmalarını Depends kullanarak Dependency Injection seviyesinde yönetebilirsiniz.

Ayrıca güvenlik gereksinimleri için herhangi bir model veya veri kullanabilirsiniz (bu örnekte bir Pydantic User modeli).

Ancak belirli bir data model, class ya da type kullanmak zorunda değilsiniz.

Modelinizde bir id ve email olsun, ama username olmasın mı istiyorsunuz? Elbette. Aynı araçları kullanabilirsiniz.

Sadece bir str mı istiyorsunuz? Ya da sadece bir dict? Veya doğrudan bir veritabanı class model instance'ı? Hepsi aynı şekilde çalışır.

Uygulamanıza giriş yapan kullanıcılar yok da robotlar, botlar veya yalnızca bir access token'a sahip başka sistemler mi var? Yine, her şey aynı şekilde çalışır.

Uygulamanız için neye ihtiyacınız varsa o türden bir model, class ve veritabanı kullanın. FastAPI, dependency injection sistemiyle bunları destekler.

Kod boyutu

Bu örnek biraz uzun görünebilir. Güvenlik, data model'ler, utility fonksiyonlar ve path operation'ları aynı dosyada bir araya getirdiğimizi unutmayın.

Ama kritik nokta şu:

Güvenlik ve dependency injection tarafını bir kez yazarsınız.

İstediğiniz kadar karmaşık hâle getirebilirsiniz. Yine de hepsi tek bir yerde ve sadece bir kez yazılmış olur. Üstelik tüm esneklikle.

Sonrasında aynı güvenlik sistemini kullanan binlerce endpoint (path operation) olabilir.

Ve bunların hepsi (ya da istediğiniz bir kısmı) bu dependency'leri veya oluşturacağınız başka dependency'leri yeniden kullanmaktan faydalanabilir.

Hatta bu binlerce path operation 3 satır kadar kısa olabilir:

{* ../../docs_src/security/tutorial002_an_py310.py hl[30:32] *}

Özet

Artık path operation function içinde mevcut kullanıcıyı doğrudan alabilirsiniz.

Yolun yarısına geldik.

Kullanıcının/istemcinin gerçekten username ve password göndermesini sağlayacak bir path operation eklememiz gerekiyor.

Sırada bu var.