{"id":41140,"date":"2026-03-03T18:40:56","date_gmt":"2026-03-03T15:40:56","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=41140"},"modified":"2026-03-03T18:40:56","modified_gmt":"2026-03-03T15:40:56","slug":"django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/","title":{"rendered":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama"},"content":{"rendered":"<p><body><\/p>\n<h2>Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama<\/h2>\n<h3>Giri\u015f: Django Uygulamalar\u0131nda Kimlik Do\u011frulaman\u0131n \u00d6nemi<\/h3>\n<p>Modern web uygulamalar\u0131n\u0131n temel ta\u015flar\u0131ndan biri, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 ve yetkilendirmesidir. Kullan\u0131c\u0131lar\u0131n g\u00fcvenli bir \u015fekilde kaydolabilmesi, giri\u015f yapabilmesi ve hesaplar\u0131n\u0131 y\u00f6netebilmesi, herhangi bir uygulaman\u0131n ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Django, kendi b\u00fcnyesinde g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama sistemi sunsa da, bu sistem genellikle temel i\u015flevleri kapsar. E-posta do\u011frulama, sosyal medya ile giri\u015f, \u015fifre s\u0131f\u0131rlama, \u00e7oklu e-posta y\u00f6netimi gibi geli\u015fmi\u015f \u00f6zellikler i\u00e7in ek geli\u015ftirme veya \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphanelere ihtiya\u00e7 duyulur. \u0130\u015fte bu noktada <code>django-allauth<\/code> devreye girer.<\/p>\n<p><code>django-allauth<\/code>, Django uygulamalar\u0131 i\u00e7in kapsaml\u0131 bir kimlik do\u011frulama ve hesap y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc sunan pop\u00fcler bir \u00fc\u00e7\u00fcnc\u00fc taraf paketidir. Sadece geleneksel kullan\u0131c\u0131 ad\u0131\/\u015fifre tabanl\u0131 kimlik do\u011frulamas\u0131n\u0131 de\u011fil, ayn\u0131 zamanda Google, Facebook, GitHub gibi pop\u00fcler sa\u011flay\u0131c\u0131lar arac\u0131l\u0131\u011f\u0131yla sosyal medya ile giri\u015fi de sorunsuz bir \u015fekilde entegre eder. Bu makalede, <code>django-allauth<\/code>&#8216;u Django projenize nas\u0131l entegre edece\u011finizi, temel ve geli\u015fmi\u015f yap\u0131land\u0131rmalar\u0131n\u0131, kullan\u0131c\u0131 deneyimini nas\u0131l \u00f6zelle\u015ftirece\u011finizi ve g\u00fcvenli bir kimlik do\u011frulama ak\u0131\u015f\u0131 olu\u015fturmak i\u00e7in nelere dikkat etmeniz gerekti\u011fini detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Amac\u0131m\u0131z, <code>django-allauth<\/code>&#8216;u kullanarak hem geli\u015ftirici zaman\u0131ndan tasarruf etmek hem de kullan\u0131c\u0131lar\u0131n\u0131za zengin ve g\u00fcvenli bir kimlik do\u011frulama deneyimi sunmakt\u0131r.<\/p>\n<h3>django-allauth Kurulumu ve Temel Yap\u0131land\u0131rma<\/h3>\n<p><code>django-allauth<\/code>&#8216;u projenize entegre etmek, birka\u00e7 basit ad\u0131m\u0131 i\u00e7erir. Bu ad\u0131mlar, paketi kurmaktan, Django projenizin ayarlar\u0131n\u0131 ve URL yap\u0131land\u0131rmas\u0131n\u0131 d\u00fczenlemeye kadar uzan\u0131r.<\/p>\n<h4>Paketin Kurulumu<\/h4>\n<p>\u0130lk ad\u0131m, <code>django-allauth<\/code> paketini <code>pip<\/code> kullanarak projenizin sanal ortam\u0131na kurmakt\u0131r:<\/p>\n<pre><code class=\"language-bash\">pip install django-allauth<\/code><\/pre>\n<h4>INSTALLED_APPS Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Kurulumdan sonra, Django projenizin <code>settings.py<\/code> dosyas\u0131nda <code>INSTALLED_APPS<\/code> listesine <code>django-allauth<\/code> ile ilgili uygulamalar\u0131 eklemeniz gerekir. Bu uygulamalar, temel kimlik do\u011frulama, hesap y\u00f6netimi ve sosyal medya entegrasyonu i\u00e7in gereklidir:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nINSTALLED_APPS = [\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    'django.contrib.sites', # django-allauth i\u00e7in gerekli\n\n    'allauth',\n    'allauth.account',\n    'allauth.socialaccount',\n    # \u0130ste\u011fe ba\u011fl\u0131: Kullanmak istedi\u011finiz sosyal sa\u011flay\u0131c\u0131lar\n    # 'allauth.socialaccount.providers.google',\n    # 'allauth.socialaccount.providers.github',\n    # 'allauth.socialaccount.providers.facebook',\n]<\/code><\/pre>\n<p><code>django.contrib.sites<\/code> uygulamas\u0131n\u0131n eklenmesi \u00f6nemlidir \u00e7\u00fcnk\u00fc <code>django-allauth<\/code>, e-posta do\u011frulama ve \u015fifre s\u0131f\u0131rlama gibi i\u015flemler i\u00e7in site bilgilerini kullan\u0131r.<\/p>\n<h4>SITE_ID Tan\u0131mlamas\u0131<\/h4>\n<p><code>django-contrib-sites<\/code> uygulamas\u0131 y\u00fcklendi\u011finde, <code>settings.py<\/code> dosyan\u0131zda bir <code>SITE_ID<\/code> tan\u0131mlaman\u0131z gerekir. \u00c7o\u011fu proje i\u00e7in varsay\u0131lan olarak <code>1<\/code> yeterlidir:<\/p>\n<pre><code class=\"language-python\"># settings.py\nSITE_ID = 1<\/code><\/pre>\n<p>Bu ayar, sitenizin veritaban\u0131ndaki <code>Site<\/code> modeline referans verir. Y\u00f6netici panelinden <code>Sites<\/code> b\u00f6l\u00fcm\u00fcne giderek bu ayar\u0131 kontrol edebilir veya de\u011fi\u015ftirebilirsiniz.<\/p>\n<h4>URL Yap\u0131land\u0131rmas\u0131<\/h4>\n<p><code>django-allauth<\/code>&#8216;un URL&#8217;lerini projenizin ana <code>urls.py<\/code> dosyas\u0131na dahil etmeniz gerekir:<\/p>\n<pre><code class=\"language-python\"># your_project\/urls.py\n\nfrom django.contrib import admin\nfrom django.urls import path, include\n\nurlpatterns = [\n    path('admin\/', admin.site.urls),\n    path('accounts\/', include('allauth.urls')), # allauth URL'lerini dahil et\n    # Di\u011fer uygulama URL'leriniz\n]<\/code><\/pre>\n<p><code>accounts\/<\/code> yolu alt\u0131nda <code>allauth<\/code>&#8216;un t\u00fcm kimlik do\u011frulama, kay\u0131t, \u015fifre s\u0131f\u0131rlama ve sosyal giri\u015f URL&#8217;leri eri\u015filebilir olacakt\u0131r.<\/p>\n<h4>Veritaban\u0131 G\u00f6\u00e7leri (Migrations)<\/h4>\n<p>Son olarak, <code>django-allauth<\/code>&#8216;un veritaban\u0131 tablolar\u0131n\u0131 olu\u015fturmak i\u00e7in migrasyonlar\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">python manage.py makemigrations\npython manage.py migrate<\/code><\/pre>\n<p>Bu ad\u0131mlar\u0131 tamamlad\u0131\u011f\u0131n\u0131zda, <code>django-allauth<\/code> projenize ba\u015far\u0131yla entegre edilmi\u015f ve temel kimlik do\u011frulama i\u015flevleri kullan\u0131ma haz\u0131r hale gelmi\u015f olacakt\u0131r.<\/p>\n<h3>Temel Ayarlar ve Kullan\u0131c\u0131 Ak\u0131\u015flar\u0131<\/h3>\n<p><code>django-allauth<\/code>&#8216;u kurduktan sonra, uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re \u00e7e\u015fitli ayarlar\u0131 yap\u0131land\u0131rman\u0131z gerekir. Bu ayarlar, kullan\u0131c\u0131 kay\u0131t, giri\u015f ve hesap y\u00f6netimi ak\u0131\u015flar\u0131n\u0131 do\u011frudan etkiler.<\/p>\n<h4>Giri\u015f ve \u00c7\u0131k\u0131\u015f Y\u00f6nlendirme URL&#8217;leri<\/h4>\n<p>Kullan\u0131c\u0131lar ba\u015far\u0131yla giri\u015f yapt\u0131\u011f\u0131nda veya \u00e7\u0131k\u0131\u015f yapt\u0131\u011f\u0131nda nereye y\u00f6nlendirileceklerini belirlemek i\u00e7in a\u015fa\u011f\u0131daki ayarlar\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nLOGIN_REDIRECT_URL = '\/' # Giri\u015f sonras\u0131 ana sayfaya y\u00f6nlendir\nLOGOUT_REDIRECT_URL = '\/' # \u00c7\u0131k\u0131\u015f sonras\u0131 ana sayfaya y\u00f6nlendir<\/code><\/pre>\n<p>Bu URL&#8217;leri uygulaman\u0131z\u0131n yap\u0131s\u0131na g\u00f6re de\u011fi\u015ftirebilirsiniz (\u00f6rne\u011fin, bir kullan\u0131c\u0131 profil sayfas\u0131na y\u00f6nlendirmek).<\/p>\n<h4>E-posta Arka Ucu Yap\u0131land\u0131rmas\u0131<\/h4>\n<p><code>django-allauth<\/code>, e-posta do\u011frulama, \u015fifre s\u0131f\u0131rlama ve di\u011fer e-posta bildirimleri i\u00e7in Django&#8217;nun e-posta sistemini kullan\u0131r. Geli\u015ftirme ortam\u0131nda e-postalar\u0131 konsola yazd\u0131rmak i\u00e7in basit bir yap\u0131land\u0131rma yeterlidir:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nEMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'<\/code><\/pre>\n<p>\u00dcretim ortam\u0131nda ise SendGrid, Mailgun veya Amazon SES gibi ger\u00e7ek bir SMTP servisi kullanman\u0131z gerekecektir.<\/p>\n<h4>Hesap Ayarlar\u0131 (ACCOUNT_ Ayarlar\u0131)<\/h4>\n<p><code>django-allauth<\/code>, <code>ACCOUNT_<\/code> \u00f6n eki ile ba\u015flayan bir\u00e7ok yap\u0131land\u0131rma ayar\u0131na sahiptir. Bunlar, kullan\u0131c\u0131 kay\u0131t ve giri\u015f davran\u0131\u015f\u0131n\u0131 \u00f6zelle\u015ftirmenize olanak tan\u0131r:<\/p>\n<p>*   <strong>ACCOUNT_AUTHENTICATION_METHOD<\/strong>: Kullan\u0131c\u0131lar\u0131n hangi y\u00f6ntemle giri\u015f yapabilece\u011fini belirler.<br \/>\n    *   <code>\"username\"<\/code>: Sadece kullan\u0131c\u0131 ad\u0131 ile.<br \/>\n    *   <code>\"email\"<\/code>: Sadece e-posta ile.<br \/>\n    *   <code>\"username_email\"<\/code>: Hem kullan\u0131c\u0131 ad\u0131 hem de e-posta ile (varsay\u0131lan).<br \/>\n*   <strong>ACCOUNT_EMAIL_REQUIRED<\/strong>: Kay\u0131t s\u0131ras\u0131nda e-posta adresinin zorunlu olup olmad\u0131\u011f\u0131n\u0131 belirler (varsay\u0131lan: <code>False<\/code>). Genellikle <code>True<\/code> olarak ayarlanmas\u0131 \u00f6nerilir.<br \/>\n*   <strong>ACCOUNT_UNIQUE_EMAIL<\/strong>: E-posta adreslerinin benzersiz olmas\u0131n\u0131 zorlar (varsay\u0131lan: <code>True<\/code>). G\u00fcvenlik ve veri tutarl\u0131l\u0131\u011f\u0131 i\u00e7in <code>True<\/code> kalmal\u0131d\u0131r.<br \/>\n*   <strong>ACCOUNT_USERNAME_REQUIRED<\/strong>: Kay\u0131t s\u0131ras\u0131nda kullan\u0131c\u0131 ad\u0131n\u0131n zorunlu olup olmad\u0131\u011f\u0131n\u0131 belirler (varsay\u0131lan: <code>True<\/code>).<br \/>\n*   <strong>ACCOUNT_EMAIL_VERIFICATION<\/strong>: E-posta do\u011frulama s\u00fcrecini kontrol eder.<br \/>\n    *   <code>\"none\"<\/code>: E-posta do\u011frulamas\u0131 yok.<br \/>\n    *   <code>\"optional\"<\/code>: E-posta do\u011frulamas\u0131 iste\u011fe ba\u011fl\u0131d\u0131r.<br \/>\n    *   <code>\"mandatory\"<\/code>: E-posta do\u011frulamas\u0131 zorunludur. Kullan\u0131c\u0131lar e-postalar\u0131n\u0131 do\u011frulayana kadar giri\u015f yapamazlar veya belirli \u00f6zelliklere eri\u015femezler (\u00f6nerilen).<br \/>\n*   <strong>ACCOUNT_LOGIN_ATTEMPTS_LIMIT<\/strong>: Belirli bir s\u00fcre i\u00e7inde yap\u0131labilecek giri\u015f denemesi say\u0131s\u0131n\u0131 s\u0131n\u0131rlar (varsay\u0131lan: <code>None<\/code>).<br \/>\n*   <strong>ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT<\/strong>: Giri\u015f denemeleri k\u0131s\u0131tlamas\u0131n\u0131n s\u00fcresi (saniye cinsinden).<\/p>\n<p>\u00d6rnek bir yap\u0131land\u0131rma:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nACCOUNT_AUTHENTICATION_METHOD = \"email\"\nACCOUNT_EMAIL_REQUIRED = True\nACCOUNT_UNIQUE_EMAIL = True\nACCOUNT_USERNAME_REQUIRED = False # Sadece e-posta ile giri\u015f yap\u0131laca\u011f\u0131 i\u00e7in kullan\u0131c\u0131 ad\u0131 zorunlu de\u011fil\nACCOUNT_EMAIL_VERIFICATION = \"mandatory\" # E-posta do\u011frulamay\u0131 zorunlu k\u0131l\nACCOUNT_LOGIN_ATTEMPTS_LIMIT = 5\nACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 300 # 5 dakika<\/code><\/pre>\n<h4>Kullan\u0131c\u0131 Kay\u0131t Ak\u0131\u015f\u0131<\/h4>\n<p><code>ACCOUNT_EMAIL_VERIFICATION<\/code> ayar\u0131na ba\u011fl\u0131 olarak, kay\u0131t ak\u0131\u015f\u0131 farkl\u0131l\u0131k g\u00f6sterir:<\/p>\n<p>*   <strong><code>\"none\"<\/code><\/strong>: Kullan\u0131c\u0131 kaydolur ve hemen giri\u015f yapabilir.<br \/>\n*   <strong><code>\"optional\"<\/code><\/strong>: Kullan\u0131c\u0131 kaydolur ve hemen giri\u015f yapabilir. Bir do\u011frulama e-postas\u0131 g\u00f6nderilir, ancak do\u011frulamasa bile hesab\u0131 aktiftir.<br \/>\n*   <strong><code>\"mandatory\"<\/code><\/strong>: Kullan\u0131c\u0131 kaydolduktan sonra bir do\u011frulama e-postas\u0131 al\u0131r. Hesab\u0131n\u0131 kullanabilmesi i\u00e7in e-postadaki ba\u011flant\u0131ya t\u0131klayarak hesab\u0131n\u0131 do\u011frulamas\u0131 gerekir. Bu, spam ve sahte hesaplar\u0131 \u00f6nlemek i\u00e7in en g\u00fcvenli yakla\u015f\u0131md\u0131r.<\/p>\n<h4>Giri\u015f Ak\u0131\u015f\u0131<\/h4>\n<p>Kullan\u0131c\u0131lar, <code>ACCOUNT_AUTHENTICATION_METHOD<\/code> ayar\u0131na g\u00f6re kullan\u0131c\u0131 ad\u0131, e-posta veya her ikisiyle giri\u015f yapabilirler. <code>django-allauth<\/code>, varsay\u0131lan olarak <code>\/accounts\/login\/<\/code> adresinde bir giri\u015f formu sunar. Ba\u015far\u0131s\u0131z giri\u015f denemeleri <code>ACCOUNT_LOGIN_ATTEMPTS_LIMIT<\/code> ve <code>ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT<\/code> ayarlar\u0131yla y\u00f6netilebilir.<\/p>\n<h4>\u015eifre S\u0131f\u0131rlama Ak\u0131\u015f\u0131<\/h4>\n<p><code>django-allauth<\/code>, g\u00fcvenli bir \u015fifre s\u0131f\u0131rlama mekanizmas\u0131 sa\u011flar. Kullan\u0131c\u0131lar <code>\/accounts\/password\/reset\/<\/code> adresinden \u015fifre s\u0131f\u0131rlama talebinde bulunabilirler. Sistem, kay\u0131tl\u0131 e-posta adresine \u00f6zel bir ba\u011flant\u0131 i\u00e7eren bir e-posta g\u00f6nderir. Kullan\u0131c\u0131 bu ba\u011flant\u0131ya t\u0131klayarak yeni bir \u015fifre belirleyebilir. Bu s\u00fcre\u00e7, kullan\u0131c\u0131lar\u0131n hesaplar\u0131na eri\u015fimi kaybetmeleri durumunda \u00f6nemli bir g\u00fcvenlik ve kullan\u0131labilirlik \u00f6zelli\u011fidir.<\/p>\n<p>Bu temel ayarlar ve ak\u0131\u015flar, <code>django-allauth<\/code> ile projenizde sa\u011flam bir kimlik do\u011frulama altyap\u0131s\u0131 olu\u015fturman\u0131z i\u00e7in ilk ad\u0131mlard\u0131r.<\/p>\n<h3>Sosyal Kimlik Do\u011frulama Entegrasyonu<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz web uygulamalar\u0131nda kullan\u0131c\u0131lar\u0131n Facebook, Google, GitHub gibi sosyal medya hesaplar\u0131yla giri\u015f yapabilmesi, kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131ran ve kay\u0131t s\u00fcrecini basitle\u015ftiren pop\u00fcler bir \u00f6zelliktir. <code>django-allauth<\/code>, bu t\u00fcr sosyal kimlik do\u011frulama entegrasyonunu olduk\u00e7a kolayla\u015ft\u0131r\u0131r.<\/p>\n<h4>Sosyal Sa\u011flay\u0131c\u0131lar\u0131n Etkinle\u015ftirilmesi<\/h4>\n<p>Sosyal medya ile giri\u015f \u00f6zelli\u011fini kullanmak i\u00e7in \u00f6ncelikle <code>settings.py<\/code> dosyan\u0131zda kullanmak istedi\u011finiz sa\u011flay\u0131c\u0131lar\u0131 <code>INSTALLED_APPS<\/code> listesine eklemeniz gerekir:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nINSTALLED_APPS = [\n    # ... di\u011fer uygulamalar ...\n    'allauth',\n    'allauth.account',\n    'allauth.socialaccount',\n    # Kullanmak istedi\u011finiz sosyal sa\u011flay\u0131c\u0131lar:\n    'allauth.socialaccount.providers.google',\n    'allauth.socialaccount.providers.github',\n    'allauth.socialaccount.providers.facebook',\n    # vb.\n]<\/code><\/pre>\n<p>Her sa\u011flay\u0131c\u0131n\u0131n kendi mod\u00fcl\u00fc bulunur ve bunlar\u0131 projenize dahil etmeniz gerekir.<\/p>\n<h4>Sosyal Uygulama Olu\u015fturma ve API Kimlik Bilgileri<\/h4>\n<p>Her sosyal sa\u011flay\u0131c\u0131 i\u00e7in (\u00f6rn. Google, GitHub, Facebook), ilgili platformda bir geli\u015ftirici uygulamas\u0131 olu\u015fturman\u0131z ve bu uygulamaya ait API kimlik bilgilerini (Client ID ve Client Secret) alman\u0131z gerekir. Bu s\u00fcre\u00e7 genellikle a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 i\u00e7erir:<\/p>\n<p>1.  <strong>Geli\u015ftirici Konsoluna Eri\u015fim:<\/strong><br \/>\n    *   <strong>Google:<\/strong> Google Cloud Console<br \/>\n    *   <strong>GitHub:<\/strong> GitHub Developer Settings<br \/>\n    *   <strong>Facebook:<\/strong> Facebook for Developers<br \/>\n2.  <strong>Yeni Uygulama Olu\u015fturma:<\/strong> Her platformda yeni bir uygulama veya proje olu\u015fturun.<br \/>\n3.  <strong>Kimlik Do\u011frulama Ayarlar\u0131:<\/strong> Uygulaman\u0131z\u0131n kimlik do\u011frulama veya OAuth ayarlar\u0131 b\u00f6l\u00fcm\u00fcne gidin.<br \/>\n4.  <strong>Y\u00f6nlendirme URI&#8217;leri (Redirect URIs):<\/strong> Bu k\u0131s\u0131m \u00e7ok \u00f6nemlidir. <code>django-allauth<\/code>&#8216;un kimlik do\u011frulama sonras\u0131 kullan\u0131c\u0131y\u0131 geri y\u00f6nlendirece\u011fi URL&#8217;yi belirtmeniz gerekir. Genellikle bu URL, <code>http:\/\/127.0.0.1:8000\/accounts\/google\/login\/callback\/<\/code> (yerel geli\u015ftirme i\u00e7in) veya <code>https:\/\/yourdomain.com\/accounts\/google\/login\/callback\/<\/code> (\u00fcretim i\u00e7in) gibi bir yap\u0131ya sahiptir. Sa\u011flay\u0131c\u0131ya g\u00f6re <code>google<\/code> k\u0131sm\u0131 de\u011fi\u015fir (\u00f6rn. <code>github<\/code>, <code>facebook<\/code>). Birden fazla y\u00f6nlendirme URI&#8217;si ekleyebilirsiniz (geli\u015ftirme ve \u00fcretim i\u00e7in).<br \/>\n5.  <strong>Client ID ve Client Secret Alma:<\/strong> Uygulaman\u0131z\u0131 kaydettikten sonra, size bir Client ID ve bir Client Secret verilecektir. Bu bilgiler, uygulaman\u0131z\u0131n sosyal sa\u011flay\u0131c\u0131 ile g\u00fcvenli bir \u015fekilde ileti\u015fim kurmas\u0131n\u0131 sa\u011flar. Bu bilgileri kesinlikle gizli tutmal\u0131s\u0131n\u0131z.<\/p>\n<h4>Django Y\u00f6netici Panelinde SocialApp Ekleme<\/h4>\n<p>API kimlik bilgilerini ald\u0131ktan sonra, Django y\u00f6netici panelinde (admin) bunlar\u0131 <code>Social applications<\/code> (Sosyal uygulamalar) b\u00f6l\u00fcm\u00fcne eklemeniz gerekir.<\/p>\n<p>1.  <code>http:\/\/127.0.0.1:8000\/admin\/<\/code> adresine gidin.<br \/>\n2.  <code>Social applications<\/code> alt\u0131nda <code>Add social application<\/code> (Sosyal uygulama ekle) se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n3.  <strong>Provider (Sa\u011flay\u0131c\u0131):<\/strong> A\u00e7\u0131l\u0131r listeden ekledi\u011finiz sa\u011flay\u0131c\u0131y\u0131 se\u00e7in (\u00f6rn. Google).<br \/>\n4.  <strong>Name (Ad):<\/strong> Uygulaman\u0131za a\u00e7\u0131klay\u0131c\u0131 bir ad verin (\u00f6rn. &#8220;My Google App&#8221;).<br \/>\n5.  <strong>Client ID:<\/strong> Sosyal sa\u011flay\u0131c\u0131dan ald\u0131\u011f\u0131n\u0131z Client ID&#8217;yi yap\u0131\u015ft\u0131r\u0131n.<br \/>\n6.  <strong>Secret Key (Gizli Anahtar):<\/strong> Sosyal sa\u011flay\u0131c\u0131dan ald\u0131\u011f\u0131n\u0131z Client Secret&#8217;\u0131 yap\u0131\u015ft\u0131r\u0131n.<br \/>\n7.  <strong>Sites:<\/strong> Uygulaman\u0131z\u0131n ili\u015fkilendirilece\u011fi siteyi se\u00e7in (genellikle <code>example.com<\/code> veya kendi alan ad\u0131n\u0131z).<br \/>\n8.  Kaydedin.<\/p>\n<h4>SOCIALACCOUNT_PROVIDERS Ayarlar\u0131 (\u0130ste\u011fe Ba\u011fl\u0131)<\/h4>\n<p>Baz\u0131 sosyal sa\u011flay\u0131c\u0131lar i\u00e7in ek yap\u0131land\u0131rmalar gerekebilir. Bu ayarlar\u0131 <code>SOCIALACCOUNT_PROVIDERS<\/code> s\u00f6zl\u00fc\u011f\u00fc i\u00e7inde <code>settings.py<\/code> dosyan\u0131zda tan\u0131mlayabilirsiniz. \u00d6rne\u011fin, Google i\u00e7in baz\u0131 kapsamlar\u0131 (scopes) belirtmek isteyebilirsiniz:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nSOCIALACCOUNT_PROVIDERS = {\n    'google': {\n        'APP': {\n            'client_id': 'YOUR_GOOGLE_CLIENT_ID', # Genellikle admin panelinden gelir, burada \u00f6rnek ama\u00e7l\u0131d\u0131r.\n            'secret': 'YOUR_GOOGLE_CLIENT_SECRET', # Genellikle admin panelinden gelir, burada \u00f6rnek ama\u00e7l\u0131d\u0131r.\n            'key': ''\n        },\n        'SCOPE': [\n            'profile',\n            'email',\n        ],\n        'AUTH_PARAMS': {\n            'access_type': 'offline',\n        }\n    },\n    'github': {\n        'SCOPE': [\n            'user',\n            'repo',\n        ],\n    }\n}<\/code><\/pre>\n<p><code>client_id<\/code> ve <code>secret<\/code> de\u011ferlerini do\u011frudan <code>settings.py<\/code>&#8216;ye yazmak yerine, bunlar\u0131 admin panelinden y\u00f6netmek daha esnek ve g\u00fcvenlidir. <code>SOCIALACCOUNT_PROVIDERS<\/code> genellikle kapsam (scope) veya \u00f6zel parametreler gibi sa\u011flay\u0131c\u0131ya \u00f6zg\u00fc ayarlar i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4>\u015eablonlarda Sosyal Giri\u015f D\u00fc\u011fmeleri<\/h4>\n<p><code>django-allauth<\/code>, sosyal giri\u015f d\u00fc\u011fmelerini g\u00f6stermek i\u00e7in haz\u0131r \u015fablon par\u00e7ac\u0131klar\u0131 sunar. <code>login.html<\/code> \u015fablonunuzda veya ba\u015fka bir yerde bunlar\u0131 dahil edebilirsiniz:<\/p>\n<pre><code class=\"language-html\"><!-- templates\/account\/login.html veya ba\u015fka bir \u015fablon -->\n\n{% load socialaccount %}\n\n\n\n<form method=\"post\" action=\"{% url 'account_login' %}\">\n    {% csrf_token %}\n    {{ form.as_p }}\n    <button type=\"submit\">Giri\u015f Yap<\/button>\n<\/form>\n\n<h2>Veya Sosyal Medya ile Giri\u015f Yap<\/h2>\n<ul>\n    {% for provider in socialaccount.providers %}\n    <li>\n        <a href=\"{% provider_login_url provider.id %}\">\n            {{ provider.name }} ile Giri\u015f Yap\n        <\/a>\n    <\/li>\n    {% endfor %}\n<\/ul><\/code><\/pre>\n<p>Bu kod par\u00e7ac\u0131\u011f\u0131, <code>settings.py<\/code> ve admin panelinde etkinle\u015ftirdi\u011finiz t\u00fcm sosyal sa\u011flay\u0131c\u0131lar i\u00e7in otomatik olarak giri\u015f d\u00fc\u011fmeleri olu\u015fturur. Kullan\u0131c\u0131 bu d\u00fc\u011fmelerden birine t\u0131klad\u0131\u011f\u0131nda, ilgili sosyal sa\u011flay\u0131c\u0131n\u0131n kimlik do\u011frulama sayfas\u0131na y\u00f6nlendirilir, izinleri onaylad\u0131ktan sonra uygulaman\u0131za geri d\u00f6ner ve otomatik olarak giri\u015f yapm\u0131\u015f olur.<\/p>\n<p>Sosyal kimlik do\u011frulama, kullan\u0131c\u0131 kay\u0131t oranlar\u0131n\u0131 art\u0131r\u0131rken, \u015fifre y\u00f6netimi y\u00fck\u00fcn\u00fc azaltarak genel kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirir. <code>django-allauth<\/code> sayesinde bu entegrasyon s\u00fcreci olduk\u00e7a basitle\u015fir.<\/p>\n<h3>django-allauth \u00d6zelle\u015ftirme ve Geli\u015fmi\u015f Kullan\u0131m<\/h3>\n<p><code>django-allauth<\/code>, varsay\u0131lan olarak bir\u00e7ok i\u015flevi sunsa da, \u00e7o\u011fu uygulama \u00f6zel ihtiya\u00e7lara g\u00f6re \u00f6zelle\u015ftirme gerektirir. <code>django-allauth<\/code>, \u015fablonlar\u0131, formlar\u0131, sinyalleri ve adapt\u00f6rleri arac\u0131l\u0131\u011f\u0131yla geni\u015f bir \u00f6zelle\u015ftirme yelpazesi sunar.<\/p>\n<h4>\u015eablonlar\u0131n \u00d6zelle\u015ftirilmesi<\/h4>\n<p><code>django-allauth<\/code>, t\u00fcm kullan\u0131c\u0131 aray\u00fcz\u00fc \u00f6\u011feleri i\u00e7in varsay\u0131lan \u015fablonlar sa\u011flar (\u00f6rn. giri\u015f, kay\u0131t, \u015fifre s\u0131f\u0131rlama, e-posta do\u011frulama). Bu \u015fablonlar\u0131 uygulaman\u0131z\u0131n tasar\u0131m\u0131na uygun hale getirmek i\u00e7in kolayca ge\u00e7ersiz k\u0131labilirsiniz.<\/p>\n<p>Yapman\u0131z gereken, Django&#8217;nun \u015fablon y\u00fckleme s\u0131ras\u0131n\u0131 kullanarak <code>allauth<\/code>&#8216;un \u015fablonlar\u0131n\u0131 kendi \u015fablonlar\u0131n\u0131zla de\u011fi\u015ftirmektir. \u00d6rne\u011fin, giri\u015f sayfas\u0131n\u0131 \u00f6zelle\u015ftirmek i\u00e7in <code>templates\/account\/login.html<\/code> yolunda kendi \u015fablonunuzu olu\u015fturursunuz:<\/p>\n<pre><code class=\"language-html\"><!-- myapp\/templates\/account\/login.html -->\n{% extends \"base.html\" %}\n{% load i18n %}\n{% load allauth account %}\n\n{% block head_title %}\n    {% trans \"Sign In\" %}\n{% endblock head_title %}\n\n{% block content %}\n    <div class=\"container\">\n        <div class=\"row justify-content-center\">\n            <div class=\"col-md-6\">\n                <div class=\"card\">\n                    <div class=\"card-header\">{% trans \"Sign In\" %}<\/div>\n                    <div class=\"card-body\">\n                        {% url 'account_login' as login_url %}\n                        {% element form form=form method=\"post\" action=login_url tags=\"entrance,login\" %}\n                            {% slot body %}\n                                {% csrf_token %}\n                                {% element fields form=form %}\n                                {% endelement %}\n                                {% if redirect_field_value %}\n                                    <input type=\"hidden\"\n                                           name=\"{{ redirect_field_name }}\"\n                                           value=\"{{ redirect_field_value }}\" \/>\n                                {% endif %}\n                            {% endslot %}\n                            {% slot actions %}\n                                {% element button type=\"submit\" tags=\"primary,login\" %}\n                                    {% trans \"Sign In\" %}\n                                {% endelement %}\n                            {% endslot %}\n                        {% endelement %}\n                        <hr>\n                        <p class=\"mt-3\">\n                            <a class=\"button secondaryAction\"\n                               href=\"{% url 'account_reset_password' %}\">{% trans \"Forgot Password?\" %}<\/a>\n                        <\/p>\n                        <p>\n                            {% trans \"Don't have an account?\" %}\n                            <a href=\"{% url 'account_signup' %}\">{% trans \"Sign Up\" %}<\/a>\n                        <\/p>\n\n                        {% include \"socialaccount\/snippets\/provider_list.html\" %}\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n{% endblock content %}<\/code><\/pre>\n<p>Bu \u00f6rnek, Bootstrap ile entegrasyonu kolayla\u015ft\u0131rmak i\u00e7in <code>allauth<\/code>&#8216;un kendi <code>element<\/code> etiketlerini kullan\u0131r. Kendi HTML ve CSS kodunuzu yazarak tamamen farkl\u0131 bir g\u00f6r\u00fcn\u00fcm elde edebilirsiniz. Di\u011fer \u015fablonlar i\u00e7in de benzer bir yap\u0131 izlenir: <code>account\/signup.html<\/code>, <code>account\/password_reset_form.html<\/code>, <code>account\/email_confirm.html<\/code> vb.<\/p>\n<h4>Formlar\u0131n \u00d6zelle\u015ftirilmesi<\/h4>\n<p>Varsay\u0131lan <code>allauth<\/code> formlar\u0131na (\u00f6rn. kay\u0131t formu, giri\u015f formu) ek alanlar eklemek veya mevcut alanlar\u0131n davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirmek isteyebilirsiniz. Bunu, <code>ACCOUNT_FORMS<\/code> ve <code>SOCIALACCOUNT_FORMS<\/code> ayarlar\u0131n\u0131 kullanarak yapabilirsiniz.<\/p>\n<p>\u00d6ncelikle, kendi formlar\u0131n\u0131z\u0131 tan\u0131mlad\u0131\u011f\u0131n\u0131z bir <code>forms.py<\/code> dosyas\u0131 olu\u015fturun (\u00f6rne\u011fin, uygulaman\u0131z\u0131n i\u00e7inde <code>myapp\/forms.py<\/code>):<\/p>\n<pre><code class=\"language-python\"># myapp\/forms.py\nfrom allauth.account.forms import SignupForm\nfrom django import forms\n\nclass MyCustomSignupForm(SignupForm):\n    first_name = forms.CharField(max_length=30, label='Ad\u0131n\u0131z')\n    last_name = forms.CharField(max_length=30, label='Soyad\u0131n\u0131z')\n\n    def save(self, request):\n        user = super(MyCustomSignupForm, self).save(request)\n        user.first_name = self.cleaned_data['first_name']\n        user.last_name = self.cleaned_data['last_name']\n        user.save()\n        return user<\/code><\/pre>\n<p>Ard\u0131ndan, <code>settings.py<\/code> dosyan\u0131zda bu formu <code>allauth<\/code>&#8216;a tan\u0131t\u0131n:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nACCOUNT_FORMS = {\n    'signup': 'myapp.forms.MyCustomSignupForm',\n    # 'login': 'myapp.forms.MyCustomLoginForm', # Giri\u015f formunu \u00f6zelle\u015ftirmek isterseniz\n}<\/code><\/pre>\n<p>Art\u0131k <code>allauth<\/code>&#8216;un kay\u0131t i\u015flemi, sizin <code>MyCustomSignupForm<\/code> formunuzu kullanacak ve <code>first_name<\/code> ile <code>last_name<\/code> alanlar\u0131n\u0131 da i\u00e7erecektir.<\/p>\n<h4>Sinyallerin Kullan\u0131lmas\u0131<\/h4>\n<p><code>django-allauth<\/code>, belirli olaylar ger\u00e7ekle\u015fti\u011finde sinyaller g\u00f6nderir. Bu sinyalleri dinleyerek, \u00f6zel i\u015f mant\u0131\u011f\u0131 uygulayabilirsiniz. En yayg\u0131n kullan\u0131lan sinyallerden baz\u0131lar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <code>user_signed_up<\/code>: Bir kullan\u0131c\u0131 ba\u015far\u0131yla kaydoldu\u011funda tetiklenir.<br \/>\n*   <code>socialaccount_added<\/code>: Bir kullan\u0131c\u0131 sosyal hesap ba\u011flad\u0131\u011f\u0131nda tetiklenir.<br \/>\n*   <code>email_confirmed<\/code>: Bir kullan\u0131c\u0131n\u0131n e-posta adresi do\u011fruland\u0131\u011f\u0131nda tetiklenir.<\/p>\n<p>\u00d6rnek olarak, yeni kaydolan her kullan\u0131c\u0131ya varsay\u0131lan bir grup atamak i\u00e7in <code>user_signed_up<\/code> sinyalini kullanabiliriz:<\/p>\n<pre><code class=\"language-python\"># myapp\/signals.py\nfrom django.dispatch import receiver\nfrom allauth.account.signals import user_signed_up\nfrom django.contrib.auth.models import Group\n\n@receiver(user_signed_up)\ndef assign_default_group_to_new_user(sender, request, user, <em><\/em>kwargs):\n    try:\n        default_group = Group.objects.get(name='Default Users')\n        user.groups.add(default_group)\n    except Group.DoesNotExist:\n        pass # Veya hata logla\n\n<h2>myapp\/__init__.py veya myapp\/apps.py i\u00e7inde sinyalleri y\u00fckle<\/h2>\n<h2>myapp\/apps.py<\/h2>\nfrom django.apps import AppConfig\n\nclass MyappConfig(AppConfig):\n    default_auto_field = 'django.db.models.BigAutoField'\n    name = 'myapp'\n\n    def ready(self):\n        import myapp.signals # Sinyallerin y\u00fcklenmesini sa\u011flar<\/code><\/pre>\n<p><code>myapp\/apps.py<\/code> dosyas\u0131ndaki <code>ready<\/code> metodunda sinyalleri import etmeyi unutmay\u0131n, aksi takdirde dinleyiciler \u00e7al\u0131\u015fmayacakt\u0131r.<\/p>\n<h4>Adapt\u00f6rlerin Kullan\u0131lmas\u0131<\/h4>\n<p>Daha karma\u015f\u0131k \u00f6zelle\u015ftirmeler i\u00e7in <code>DefaultAccountAdapter<\/code> ve <code>DefaultSocialAccountAdapter<\/code> s\u0131n\u0131flar\u0131n\u0131 ge\u00e7ersiz k\u0131labilirsiniz. Bu adapt\u00f6rler, <code>allauth<\/code>&#8216;un temel davran\u0131\u015flar\u0131n\u0131 kontrol eden bir\u00e7ok metoda sahiptir. \u00d6rne\u011fin, kay\u0131t s\u0131ras\u0131nda kullan\u0131c\u0131ya \u00f6zel bir mesaj g\u00f6ndermek veya belirli bir ko\u015fula g\u00f6re kayd\u0131 engellemek i\u00e7in adapt\u00f6rleri kullanabilirsiniz.<\/p>\n<pre><code class=\"language-python\"># myapp\/adapters.py\nfrom allauth.account.adapter import DefaultAccountAdapter\nfrom django.contrib import messages\n\nclass MyAccountAdapter(DefaultAccountAdapter):\n    def save_user(self, request, user, form, commit=True):\n        # Varsay\u0131lan kaydetme i\u015flemini \u00e7a\u011f\u0131r\n        user = super().save_user(request, user, form, commit=False)\n        # Ek alanlar\u0131 kaydet (custom form kullan\u0131yorsan\u0131z)\n        user.first_name = form.cleaned_data.get('first_name')\n        user.last_name = form.cleaned_data.get('last_name')\n        if commit:\n            user.save()\n        return user\n\n    def is_open_for_signup(self, request):\n        # Belirli bir ko\u015fula g\u00f6re kayd\u0131 kapatabilirsiniz\n        # \u00d6rne\u011fin, sadece davetiyeyle kay\u0131t\n        # if not request.session.get('invitation_code_valid'):\n        #    return False\n        return True\n\n    def add_message(self, request, level, message_template,\n                    message_context=None, extra_tags=''):\n        # Varsay\u0131lan mesajlar\u0131 \u00f6zelle\u015ftirebilir veya de\u011fi\u015ftirebilirsiniz\n        if message_template == 'account\/messages\/email_confirmation_sent.txt':\n            messages.info(request, \"Hesab\u0131n\u0131z\u0131 etkinle\u015ftirmek i\u00e7in e-postan\u0131z\u0131 kontrol edin.\")\n        else:\n            super().add_message(request, level, message_template, message_context, extra_tags)<\/code><\/pre>\n<p>Ard\u0131ndan, <code>settings.py<\/code> dosyan\u0131zda adapt\u00f6r\u00fcn\u00fcz\u00fc belirtin:<\/p>\n<pre><code class=\"language-python\"># settings.py\nACCOUNT_ADAPTER = 'myapp.adapters.MyAccountAdapter'<\/code><\/pre>\n<p>Bu \u00f6zelle\u015ftirme y\u00f6ntemleri, <code>django-allauth<\/code>&#8216;u projenizin benzersiz gereksinimlerine g\u00f6re \u015fekillendirmenize olanak tan\u0131r, b\u00f6ylece hem esnek hem de g\u00fc\u00e7l\u00fc bir kimlik do\u011frulama \u00e7\u00f6z\u00fcm\u00fc elde edersiniz.<\/p>\n<h3>G\u00fcvenlik ve En \u0130yi Uygulamalar<\/h3>\n<p>Kimlik do\u011frulama, uygulaman\u0131z\u0131n en kritik g\u00fcvenlik katmanlar\u0131ndan biridir. <code>django-allauth<\/code> bir\u00e7ok g\u00fcvenlik \u00f6zelli\u011fini varsay\u0131lan olarak sunsa da, geli\u015ftiricinin de baz\u0131 en iyi uygulamalar\u0131 takip etmesi \u00f6nemlidir.<\/p>\n<h4>HTTPS Kullan\u0131m\u0131<\/h4>\n<p>T\u00fcm kimlik do\u011frulama trafi\u011fi (giri\u015f, kay\u0131t, \u015fifre s\u0131f\u0131rlama) kesinlikle HTTPS \u00fczerinden yap\u0131lmal\u0131d\u0131r. HTTP \u00fczerinden g\u00f6nderilen hassas bilgiler (kullan\u0131c\u0131 adlar\u0131, \u015fifreler) a\u011f trafi\u011fi dinlenerek kolayca ele ge\u00e7irilebilir. \u00dcretim ortam\u0131nda uygulaman\u0131z\u0131n her zaman HTTPS kullanmas\u0131n\u0131 sa\u011flay\u0131n. Django&#8217;nun <code>SECURE_SSL_REDIRECT<\/code> ve <code>SECURE_HSTS_SECONDS<\/code> gibi ayarlar\u0131 bu konuda yard\u0131mc\u0131 olabilir.<\/p>\n<h4>G\u00fc\u00e7l\u00fc \u015eifre Politikalar\u0131<\/h4>\n<p>Kullan\u0131c\u0131lar\u0131n g\u00fc\u00e7l\u00fc \u015fifreler olu\u015fturmas\u0131n\u0131 te\u015fvik edin ve zorunlu k\u0131l\u0131n. <code>django-allauth<\/code> varsay\u0131lan olarak Django&#8217;nun \u015fifre do\u011frulay\u0131c\u0131lar\u0131n\u0131 kullan\u0131r. <code>settings.py<\/code> dosyan\u0131zda <code>AUTH_PASSWORD_VALIDATORS<\/code> ayar\u0131n\u0131 yap\u0131land\u0131rarak \u015fifre karma\u015f\u0131kl\u0131\u011f\u0131 gereksinimlerini belirleyebilirsiniz:<\/p>\n<pre><code class=\"language-python\"># settings.py\n\nAUTH_PASSWORD_VALIDATORS = [\n    {\n        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n        'OPTIONS': {\n            'min_length': 8, # Minimum \u015fifre uzunlu\u011fu\n        }\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n    },\n]<\/code><\/pre>\n<p>Bu do\u011frulay\u0131c\u0131lar, yayg\u0131n \u015fifreleri, kullan\u0131c\u0131ya ait bilgileri (kullan\u0131c\u0131 ad\u0131 gibi) i\u00e7eren \u015fifreleri ve sadece say\u0131sal \u015fifreleri engeller.<\/p>\n<h4>E-posta Do\u011frulaman\u0131n Zorunlu K\u0131l\u0131nmas\u0131<\/h4>\n<p><code>ACCOUNT_EMAIL_VERIFICATION = \"mandatory\"<\/code> ayar\u0131n\u0131 kullanarak e-posta do\u011frulamas\u0131n\u0131 zorunlu k\u0131lmak, sahte hesaplar\u0131n ve spam kay\u0131tlar\u0131n \u00f6n\u00fcne ge\u00e7mek i\u00e7in kritik \u00f6neme sahiptir. Ayr\u0131ca, kullan\u0131c\u0131lar\u0131n \u015fifre s\u0131f\u0131rlama gibi \u00f6nemli i\u015flemleri ger\u00e7ekle\u015ftirebilmesi i\u00e7in ge\u00e7erli bir e-posta adresine sahip olmalar\u0131n\u0131 sa\u011flar.<\/p>\n<h4>S\u00fcrekli G\u00fcncel Kalma<\/h4>\n<p>Hem Django hem de <code>django-allauth<\/code> paketlerini d\u00fczenli olarak g\u00fcncel tutun. G\u00fcvenlik a\u00e7\u0131klar\u0131 genellikle yeni s\u00fcr\u00fcmlerde d\u00fczeltilir. Ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131 kontrol etmek ve g\u00fcncellemek i\u00e7in <code>pip freeze > requirements.txt<\/code> ve <code>pip install -r requirements.txt --upgrade<\/code> gibi komutlar\u0131 kullan\u0131n.<\/p>\n<h4>Sosyal Kimlik Bilgilerinin G\u00fcvenli\u011fi<\/h4>\n<p>Sosyal sa\u011flay\u0131c\u0131lardan ald\u0131\u011f\u0131n\u0131z Client ID ve Client Secret bilgilerini asla herkese a\u00e7\u0131k bir depoda (\u00f6rn. GitHub) saklamay\u0131n. Bunlar\u0131 ortam de\u011fi\u015fkenleri (<code>os.environ<\/code>) veya bir s\u0131r y\u00f6neticisi (secret manager) arac\u0131l\u0131\u011f\u0131yla y\u00f6netin. Django y\u00f6netici panelinde bu bilgileri saklamak da g\u00fcvenli bir y\u00f6ntemdir, ancak \u00fcretim sunucunuzun g\u00fcvenli\u011fi kritik \u00f6neme sahiptir.<\/p>\n<h4>Hata Mesajlar\u0131n\u0131n Genel Tutulmas\u0131<\/h4>\n<p>Giri\u015f veya kay\u0131t formlar\u0131nda hata mesajlar\u0131 verirken, hata nedenini \u00e7ok spesifik bir \u015fekilde belirtmekten ka\u00e7\u0131n\u0131n (\u00f6rn. &#8220;Bu kullan\u0131c\u0131 ad\u0131 mevcut de\u011fil&#8221; yerine &#8220;Ge\u00e7ersiz kullan\u0131c\u0131 ad\u0131 veya \u015fifre&#8221;). Bu, potansiyel sald\u0131rganlara sisteminiz hakk\u0131nda bilgi s\u0131zd\u0131rmay\u0131 zorla\u015ft\u0131r\u0131r. <code>django-allauth<\/code> genellikle bu konuda iyi bir varsay\u0131lan davran\u0131\u015f sergiler.<\/p>\n<h4>Brute Force Sald\u0131r\u0131lar\u0131na Kar\u015f\u0131 Koruma<\/h4>\n<p><code>ACCOUNT_LOGIN_ATTEMPTS_LIMIT<\/code> ve <code>ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT<\/code> gibi ayarlar\u0131 kullanarak belirli bir IP adresinden veya kullan\u0131c\u0131 ad\u0131ndan gelen ba\u015far\u0131s\u0131z giri\u015f denemelerini s\u0131n\u0131rlay\u0131n. Bu, brute force sald\u0131r\u0131lar\u0131n\u0131 yava\u015flatmaya veya engellemeye yard\u0131mc\u0131 olur.<\/p>\n<h4>CAPTCHA Kullan\u0131m\u0131 (\u0130ste\u011fe Ba\u011fl\u0131)<\/h4>\n<p>Kay\u0131t veya \u015fifre s\u0131f\u0131rlama formlar\u0131na CAPTCHA (\u00f6rn. reCAPTCHA) eklemek, botlar\u0131n otomatik kay\u0131t veya \u015fifre s\u0131f\u0131rlama talepleri g\u00f6ndermesini engelleyebilir. <code>django-allauth<\/code> do\u011frudan CAPTCHA entegrasyonu sunmasa da, Django i\u00e7in mevcut CAPTCHA paketlerini (\u00f6rn. <code>django-captcha<\/code>) kullanarak bunu kendiniz entegre edebilirsiniz.<\/p>\n<p>Bu g\u00fcvenlik \u00f6nlemleri, <code>django-allauth<\/code> ile olu\u015fturdu\u011funuz kimlik do\u011frulama sisteminin sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda sa\u011flam ve g\u00fcvenli olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>django-allauth&#8217;un Avantajlar\u0131 ve Dezavantajlar\u0131<\/h3>\n<p>Her ara\u00e7ta oldu\u011fu gibi, <code>django-allauth<\/code>&#8216;un da kendi g\u00fc\u00e7l\u00fc ve zay\u0131f y\u00f6nleri vard\u0131r. Bu b\u00f6l\u00fcm, projeniz i\u00e7in <code>django-allauth<\/code> kullan\u0131p kullanmama karar\u0131n\u0131z\u0131 verirken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gerekenleri \u00f6zetlemektedir.<\/p>\n<h4>Avantajlar\u0131<\/h4>\n<p>1.  <strong>Kapsaml\u0131 \u00c7\u00f6z\u00fcm:<\/strong> Sadece temel kimlik do\u011frulamas\u0131n\u0131 de\u011fil, ayn\u0131 zamanda e-posta do\u011frulama, \u015fifre s\u0131f\u0131rlama, hesap y\u00f6netimi ve sosyal medya ile giri\u015fi de i\u00e7eren eksiksiz bir paket sunar. Bu, geli\u015ftirme s\u00fcresinden b\u00fcy\u00fck \u00f6l\u00e7\u00fcde tasarruf sa\u011flar.<br \/>\n2.  <strong>Sosyal Kimlik Do\u011frulama:<\/strong> Google, Facebook, GitHub gibi pop\u00fcler sa\u011flay\u0131c\u0131larla kolay entegrasyon, kullan\u0131c\u0131 kay\u0131t ve giri\u015f s\u00fcre\u00e7lerini basitle\u015ftirir, kullan\u0131c\u0131 deneyimini iyile\u015ftirir.<br \/>\n3.  <strong>Esneklik ve \u00d6zelle\u015ftirme:<\/strong> \u015eablonlar\u0131, formlar\u0131, sinyalleri ve adapt\u00f6rleri arac\u0131l\u0131\u011f\u0131yla geni\u015f \u00f6zelle\u015ftirme se\u00e7enekleri sunar. Uygulaman\u0131z\u0131n \u00f6zel ihtiya\u00e7lar\u0131na ve tasar\u0131m\u0131na kolayca uyarlanabilir.<br \/>\n4.  <strong>\u0130yi Bak\u0131m:<\/strong> Aktif olarak geli\u015ftirilen ve bak\u0131m\u0131 yap\u0131lan bir projedir. G\u00fcvenlik g\u00fcncellemeleri ve yeni \u00f6zellikler d\u00fczenli olarak eklenir.<br \/>\n5.  <strong>Geni\u015f Topluluk Deste\u011fi:<\/strong> Pop\u00fclerli\u011fi sayesinde geni\u015f bir kullan\u0131c\u0131 ve geli\u015ftirici toplulu\u011funa sahiptir. Dok\u00fcmantasyon, forumlar ve Stack Overflow gibi platformlarda kolayca destek bulunabilir.<br \/>\n6.  <strong>\u00c7oklu E-posta Deste\u011fi:<\/strong> Bir kullan\u0131c\u0131n\u0131n birden fazla e-posta adresine sahip olmas\u0131na ve bunlar\u0131 y\u00f6netmesine olanak tan\u0131r.<br \/>\n7.  <strong>G\u00fcvenlik Odakl\u0131:<\/strong> E-posta do\u011frulama, \u015fifre s\u0131f\u0131rlama tokenlar\u0131 ve di\u011fer g\u00fcvenlik mekanizmalar\u0131yla birlikte gelir.<\/p>\n<h4>Dezavantajlar\u0131<\/h4>\n<p>1.  <strong>Karma\u015f\u0131kl\u0131k ve \u00d6\u011frenme E\u011frisi:<\/strong> \u00d6zellikle yeni ba\u015flayanlar i\u00e7in, <code>django-allauth<\/code>&#8216;un bir\u00e7ok ayar\u0131 ve \u00f6zelle\u015ftirme noktas\u0131 ba\u015flang\u0131\u00e7ta g\u00f6z korkutucu olabilir. T\u00fcm bile\u015fenleri anlamak biraz zaman alabilir.<br \/>\n2.  <strong>Opinionated Yakla\u015f\u0131m:<\/strong> Belirli i\u015f ak\u0131\u015flar\u0131 ve varsay\u0131lan davran\u0131\u015flar sunar. E\u011fer projenizin kimlik do\u011frulama gereksinimleri <code>allauth<\/code>&#8216;un varsay\u0131lanlar\u0131ndan \u00e7ok farkl\u0131ysa, \u00f6zelle\u015ftirmeler daha karma\u015f\u0131k hale gelebilir.<br \/>\n3.  <strong>Fazla \u00d6zellik:<\/strong> K\u00fc\u00e7\u00fck ve basit projeler i\u00e7in <code>allauth<\/code>&#8216;un sundu\u011fu \u00f6zelliklerin fazlal\u0131\u011f\u0131 gereksiz bir y\u00fck gibi hissedilebilir. T\u00fcm bu \u00f6zelliklere ihtiyac\u0131n\u0131z yoksa, daha hafif bir \u00e7\u00f6z\u00fcm arayabilirsiniz.<br \/>\n4.  <strong>Ba\u011f\u0131ml\u0131l\u0131klar:<\/strong> <code>django.contrib.sites<\/code> gibi ek Django uygulamalar\u0131na ba\u011f\u0131ml\u0131d\u0131r, bu da projenizin <code>INSTALLED_APPS<\/code> listesini biraz uzat\u0131r.<br \/>\n5.  <strong>Template Dili:<\/strong> Varsay\u0131lan \u015fablonlar, <code>allauth<\/code>&#8216;un kendi <code>element<\/code> etiketlerini kullan\u0131r. Bu, standart Django \u015fablon diliyle \u00e7al\u0131\u015fmaya al\u0131\u015fk\u0131n olanlar i\u00e7in farkl\u0131 bir yakla\u015f\u0131md\u0131r, ancak tamamen kendi HTML&#8217;inizi yazarak bu durumdan ka\u00e7\u0131nabilirsiniz.<\/p>\n<p>\u00d6zetle, <code>django-allauth<\/code>, modern web uygulamalar\u0131n\u0131n ihtiya\u00e7 duydu\u011fu geli\u015fmi\u015f kimlik do\u011frulama \u00f6zelliklerini h\u0131zl\u0131 ve g\u00fcvenli bir \u015fekilde entegre etmek isteyen \u00e7o\u011fu Django projesi i\u00e7in m\u00fckemmel bir se\u00e7imdir. Sa\u011flad\u0131\u011f\u0131 esneklik ve kapsaml\u0131 \u00f6zellik seti, ba\u015flang\u0131\u00e7taki \u00f6\u011frenme e\u011frisini ve potansiyel karma\u015f\u0131kl\u0131\u011f\u0131 fazlas\u0131yla telafi eder. Ancak, \u00e7ok basit bir kimlik do\u011frulama ihtiyac\u0131n\u0131z varsa veya \u00e7ok \u00f6zel, al\u0131\u015f\u0131lmad\u0131k bir ak\u0131\u015fa ihtiyac\u0131n\u0131z varsa alternatif \u00e7\u00f6z\u00fcmleri de de\u011ferlendirmek isteyebilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Django uygulamalar\u0131nda kullan\u0131c\u0131 kimlik do\u011frulamas\u0131, bir projenin ba\u015far\u0131s\u0131 i\u00e7in hayati \u00f6neme sahip karma\u015f\u0131k bir aland\u0131r. <code>django-allauth<\/code>, bu karma\u015f\u0131kl\u0131\u011f\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftiren, kapsaml\u0131 ve esnek bir \u00fc\u00e7\u00fcnc\u00fc taraf paketi olarak \u00f6ne \u00e7\u0131kar. Geleneksel e-posta\/\u015fifre tabanl\u0131 kay\u0131t ve giri\u015ften, e-posta do\u011frulamaya, \u015fifre s\u0131f\u0131rlamaya ve en \u00f6nemlisi pop\u00fcler sosyal medya sa\u011flay\u0131c\u0131lar\u0131 arac\u0131l\u0131\u011f\u0131yla tek t\u0131kla giri\u015f imkan\u0131na kadar geni\u015f bir yelpazede \u00f6zellik sunar.<\/p>\n<p>Bu makalede, <code>django-allauth<\/code>&#8216;u projenize nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, temel ayarlar\u0131n\u0131 nas\u0131l yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131, sosyal kimlik do\u011frulamas\u0131n\u0131 nas\u0131l entegre edece\u011finizi ve \u015fablonlar, formlar, sinyaller ve adapt\u00f6rler arac\u0131l\u0131\u011f\u0131yla sistemi nas\u0131l \u00f6zelle\u015ftirece\u011finizi detayl\u0131 bir \u015fekilde ele ald\u0131k. Ayr\u0131ca, kimlik do\u011frulama sisteminizin g\u00fcvenli\u011fini sa\u011flamak i\u00e7in HTTPS kullan\u0131m\u0131, g\u00fc\u00e7l\u00fc \u015fifre politikalar\u0131 ve e-posta do\u011frulamas\u0131n\u0131n zorunlu k\u0131l\u0131nmas\u0131 gibi en iyi uygulamalar\u0131n \u00f6nemine vurgu yapt\u0131k.<\/p>\n<p><code>django-allauth<\/code>&#8216;un sundu\u011fu avantajlar (kapsaml\u0131 \u00f6zellik seti, esneklik, aktif bak\u0131m) genellikle dezavantajlar\u0131n\u0131 (ba\u015flang\u0131\u00e7taki \u00f6\u011frenme e\u011frisi, potansiyel karma\u015f\u0131kl\u0131k) g\u00f6lgede b\u0131rak\u0131r. Geli\u015ftiriciler i\u00e7in zaman tasarrufu sa\u011flarken, kullan\u0131c\u0131lara modern, g\u00fcvenli ve sorunsuz bir kimlik do\u011frulama deneyimi sunar.<\/p>\n<p>Sonu\u00e7 olarak, Django projelerinizde sa\u011flam, g\u00fcvenli ve zengin \u00f6zelliklere sahip bir kimlik do\u011frulama \u00e7\u00f6z\u00fcm\u00fc ar\u0131yorsan\u0131z, <code>django-allauth<\/code> kesinlikle de\u011ferlendirmeniz gereken birincil se\u00e7eneklerden biridir. Sundu\u011fu esneklik sayesinde, uygulaman\u0131z\u0131n benzersiz ihtiya\u00e7lar\u0131na g\u00f6re uyarlanabilir ve kullan\u0131c\u0131lar\u0131n\u0131z i\u00e7in sorunsuz bir giri\u015f noktas\u0131 olu\u015fturman\u0131za yard\u0131mc\u0131 olur. Bu rehberin, <code>django-allauth<\/code> ile Django uygulamalar\u0131n\u0131z\u0131 ba\u015far\u0131yla kimlik do\u011frulama yetenekleriyle donatman\u0131z i\u00e7in sa\u011flam bir temel olu\u015fturdu\u011funu umuyoruz.<br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama Giri\u015f: Django Uygulamalar\u0131nda Kimlik Do\u011frulaman\u0131n \u00d6nemi Modern web uygulamalar\u0131n\u0131n temel ta\u015flar\u0131ndan biri, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 ve yetkilendirmesidir.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-41140","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama\" \/>\n<meta property=\"og:description\" content=\"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama Giri\u015f: Django Uygulamalar\u0131nda Kimlik Do\u011frulaman\u0131n \u00d6nemi Modern web uygulamalar\u0131n\u0131n temel ta\u015flar\u0131ndan biri, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 ve yetkilendirmesidir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-03T15:40:56+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama\",\"datePublished\":\"2026-03-03T15:40:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/\"},\"wordCount\":3558,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/\",\"name\":\"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-03-03T15:40:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/","og_locale":"tr_TR","og_type":"article","og_title":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama","og_description":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama Giri\u015f: Django Uygulamalar\u0131nda Kimlik Do\u011frulaman\u0131n \u00d6nemi Modern web uygulamalar\u0131n\u0131n temel ta\u015flar\u0131ndan biri, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 ve yetkilendirmesidir.","og_url":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-03-03T15:40:56+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"23 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama","datePublished":"2026-03-03T15:40:56+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/"},"wordCount":3558,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/","url":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/","name":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-03-03T15:40:56+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/django-uygulamalarini-django-allauth-kullanarak-kimlik-dogrulama\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Django Uygulamalar\u0131n\u0131 django-allauth Kullanarak Kimlik Do\u011frulama"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=41140"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41140\/revisions"}],"predecessor-version":[{"id":41141,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41140\/revisions\/41141"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}