Kullanıcının şifresini sıfırlayabilmesi e postasına bir link göndereceğiz. Bu benzersiz e posta yoluyla gönderilen linke veya anahtara( anahtar doğrulanırsa) sahip olan hesap sıfırlama işlemi ve yeni şifre oluşturma özelliklerine yer vereceğiz.
Bu işlemler için aşağıdaki adımları sırayla yapın:
1. django poject-urls.py ye girin aşağıdaki yolu-kodu ekleyin:
urlpatterns = [
...
...
...
...
...
path('password-reset/', auth_views.PasswordResetView.as_view( template_name='users/password_reset.html' ), name='password_reset'),
...
]
2. Ardından logout venlogin templateslerın bulunduğu yere password_reset.html dosyasını oluşturun. Yani users-templates-users klasörüne password_reset.html dosyasını ekleyin.(klasör üzerinde sağtuş-yeni-sırasıyla yapın.)
login.html içindeki kodları kopyalayıp bu dosyada kullanabiliriz.
password_reset.html dosyasının son hali aşağıdaki gibidir:
{% extends 'blog/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content">
<form method="post">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Password-şifre Sıfırlama</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button type="submit" class="btn btn-outline-info">şifreyi resetle</button>
</div>
</form>
</div>
{% endblock %}
Şifre sıfırlama sayfamız hazır şimdi nu sıfırlama gerçekleştiğinde sayfayı nereye yönlendireceğiz o sayfayı hazırlayalım.
Bu işlem için resetleme yapıldı ifadesi yani -done- kodları yine django_project - urls.py dosyasına geçilir ve rota eklenir. Gerekli kod hemen aşağıdadır.
urlpatterns = [
... ...
path('password-reset/done/', auth_views.PasswordResetDoneView.as_view (template_name='users/password_reset_done.html'), name='password_reset_done'),
...
]
3. users app-templates-users klasörüne geçilir ve bu klasöre password_reset_done.html dosyası oluşturulur. Bu dosyada logout.html kodları kopyalanabilir ve kullanılabilir.
password_reset_done.html dosyası içinde yer alan kodlar:
{% extends 'blog/base.html' %}
{% block content %}
<div class="alert-info">
Parola resetleme-sıfırlama işlemi için e-posta gönderildi.
</div>
{% endblock %}
4. Şimdi de password resetlemeyi onaylama(confirm) sayfası hazırlamak gerekir. Öncelikle
a. django_project- urls.py dosyasına url rota tanımlanır. Aşağıdaki kod urlpatterns içine eklenir.
path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'),
name='password_reset_confirm'),
b. Şimdi de bu yola ait html dosyası oluşturulur. users app-templates-users klasörüne geçilir ve bu klasöre password_reset_confirm.html dosyası oluşturulur. password_reset.html dosyasındaki kodları alabilirsiniz.
password_reset_confirm.html dosyasındaki kodlar aşağıdaki gibidir.
{% extends 'blog/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content">
<form method="post">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Password-şifre Sıfırlama</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button type="submit" class="btn btn-outline-info">şifreyi resetle</button>
</div>
</form>
</div>
{% endblock %}
şimdi yaptığımız çalılmayı test edelim SERVER-RUN edilir ve tarayıcıya aşağıdaki satır girilir.
>>>http://127.0.0.1:8000/password-reset/ ENTER a basılır.
Karşınızda resetleme Epostasını giriniz sayfassı hazır-e postayı girin ve göndere tıklayın. Hata alacağız(connectionRefusedError alacağız) ama normaldir çünkü henüz django nın mail atmasını sağlayacak tanımlamaları settings.py dosyasına yapmadık. (hata ne anlatıyor?django kendisinin kullanacağı emaile girmeye çalıştı ama kullanıcı adı şifre tanımı henüz yapılmadığından oturum açıp resetleme e-postasını gönderemedi.)
ŞİMDİ DJANGO YA PAROLA SIFIRLAMA İÇİN GEREKEN E POSTAYI TANIMLAMA ADIMINA GEÇELİM:
DJANGONUN GMAİL İLE E-MAİL(E-POSTA) GÖNDEREBİLMESİNİ SAĞLAMAK İÇİN İKİ YOL VAR (biz örneğimizde 1. yolu kullanacağız):
1.yol:
django uygulamanızın gmail yoluyla e-posta(e-mail) göndermesini istiyoruz. Bunun için bir gmail hesabınız olması gerekir. Bu hesabınızda ayarı aşağıdaki gibi değiştirmeniz gerekir ancak unutmayın bu işlem e mail ayarınızın güvenliğini düşürür ama projeniz için geçici olarak böyle kullanabilirsiniz.
Hesabınızda sırayla aşağıdaki seçeneklere tıklayın:
**Google Hesabınızı Yönetin - Güvenlik(security) tıkla -açılan sayfada en alta yakın yere inin orda-Daha az güvenli uygulama erişimi seçeneğini kapalı/açık- açık konuma getirmeniz gerekir.
Bu ayarları tamamladıktan sonra projenizde settings.py dosyasınıza girin ve ayalarınızı değiştirdiğiniz epostanızın kullanıcı adı ve şifresini aşağıdaki gibi ekleyin:
settings.py dosyasınıza:
(burada tanımlanan e posta django projenizin- mail atmak için kullanacağı e posta ayarıdır.)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'xxxxxx@gmail.com'
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxx'
Artık tarayıcı da
>>>http://127.0.0.1:8000/password-reset/ ENTER a basılır. Karşınıza gelen sayfada ilgili yere üye olan bir kullanıcının epostasını yazıp gönderebilirsiniz. Gidip resetlemek için yazılan e postayı kontrol ediniz. django tarafından resetleme epostası gönderildiğini göreceksiniz.
Şimdi gelen maili kontrol edip resetleme işlemine devam edelim. Gelen epostada bulunan linke tıklanır. Sizi yeni şifre oluşturacağınız sayfaya yönlendirir. Açılan sayfada yeni şifrenizi girin-yeni şifreyi onaylayın seçenekleri doldurulur ardından onayla ya bastığınızda küçük bir hatayla karşılaşırsınız o hatayı düzeltmek için aşağıdaki adımları yapınız. (password_reset_complete.html dosyasını arar ve bu yolu bulamadığı için hata alırız şimdi bu hatayı düzeltelim.)
django_projects-urls.py dosyasına gidin ve yolu ekleyin:
path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view (template_name='users/password_reset_complete.html'),
name='password_reset_complete'),
Şimdi de users apps- users klasörüne password_reset_complete.html dosyası sağ tuşla oluşturulur.
password_reset_complete.html dosyasının içeriğindeki kodlar:
{% extends 'blog/base.html' %}
{% block content %}
<div class="alert-info">
Parola resetleme-sıfırlama işlemi için e-posta gönderildi.
</div>
{% endblock %}
Şifremi unuttum linkini projede görünmesini sağlayalım. Şifremi unuttum seçeneği genelde login kısmında yer alır. Bizde oraya bu linki ekleyelim.
Bunun için aşağıdaki adımları yapın.
-login.html dosyasını açın aşağıdaki kodu girin(button satırı zaten kodlarınızda vardı):
<button type="submit" ....
<small class="text-muted ml-2">
<a href="{% url 'password_reset' %}">Şifremi unuttum</a>
</small>
Django projemizde parola resetleme ardından yeni şifre oluşturma işlemlerini bitirmiş olduk.
2. yol(bu yolun kısa açıklası aşağıda ancal ayrıntısı anlatılmadı):
django uygulamanızın gmail yoluyla e-posta(e-mail) göndermesini istiyoruz. Bu sefer gmail'e bir uygulamanın özel bir izinle erişip-kullanmasını(Google apps password -olarak geçer) sağlayacağız.
Bu sefer adımları dikkatli yapın. !!!
Hesabınızda şu adımları sırayla yapmanız gerekir:
**a.Google Hesabınızı Yönetin - Güvenlik(security) tıkla -2 adımlı doğrulama aktif hale getirin.
**b. Yukarıdaki adım mutlaka yapılmalı o adımdan sonra yine Google Hesabınızı Yönetin - Güvenlik(security) -uygulama app(google apps password) ekle seçeneği aktif hale gelecek. O seçeneği kullanarak app e herhangi bir isim verin-sonra size uzun bir şifreyi otomatik olarak verecektir. Artık buradaki şifreyi django projenizin maile ulaşıp kullanmasını sağlayacaktır.
(projenizde settings.py dosyasında EMAIL_HOST_USER = 'xxxxxx@gmail.com' EMAIL_HOST_PASSWORD = 'burada_otomatik_oluşan_şifreyi_buraya_yazın' )
0 Yorumlar