Commit 6ec35b41 authored by impfundev's avatar impfundev

feat: forgot password

parent 288fedef
......@@ -48,3 +48,30 @@ class SignUpForm(forms.Form):
}
),
)
class ForgotPassword(forms.Form):
email = forms.EmailField(
widget=forms.TextInput(
attrs={
"placeholder": "Email",
"class": "form-control",
}
)
)
old_password = forms.CharField(
widget=forms.PasswordInput(
attrs={
"placeholder": "Old Password",
"class": "form-control",
}
)
)
new_password = forms.CharField(
widget=forms.PasswordInput(
attrs={
"placeholder": "New Password",
"class": "form-control",
}
)
)
{% extends "base.html" %} {% block content %}
<main
style="min-height: 100vh"
class="w-100 h-100 bg-body-secondary d-flex justify-content-center align-items-center"
>
<form
action="/auth/forgot-password/"
method="POST"
class="card w-25 p-4 rounded-4 shadow"
>
<h1 class="h3 text-center mb-4">Forgot Password</h1>
{% csrf_token %} {% for field in form %}
<div class="form-outline form-white mb-3">{{ field }}</div>
{% endfor %}
<button
type="submit"
id="submit-login"
class="btn btn-primary my-2 rounded-5"
>
Save Changes
</button>
<div class="d-flex flex-column align-items-center">
{% if message %}
<p class="alert alert-success small" role="alert">
<i class="bi bi-check2-circle"></i> {{ message }}
</p>
{% endif %} {% if error_message %}
<p class="alert alert-warning small" role="alert">
<i class="bi bi-exclamation-circle"></i> {{ error_message }}
</p>
{% endif %}
<p class="my-2">
Back to <a href="/auth/login">Login</a> or
<a href="/auth/sign-up">Sign Up</a>
</p>
</div>
</form>
</main>
{% endblock content %}
......@@ -19,14 +19,17 @@
>
Login
</button>
{% if error_message %}
<p class="alert alert-warning small" role="alert">
<i class="bi bi-exclamation-circle"></i> {{ error_message }}
</p>
{% endif %}
<p class="my-2">
Don't have an account? <a href="/auth/sign-up">Sign Up</a>
</p>
<div class="d-flex flex-column align-items-center">
{% if error_message %}
<p class="alert alert-warning small" role="alert">
<i class="bi bi-exclamation-circle"></i> {{ error_message }}
</p>
{% endif %}
<p class="my-2">
Don't have an account? <a href="/auth/sign-up">Sign Up</a>
</p>
<a href="/auth/forgot-password/" class="my-2">Forgot password</a>
</div>
</form>
</main>
{% endblock content %}
......@@ -19,12 +19,16 @@
>
Login
</button>
{% if error_message %}
<p class="alert alert-warning small" role="alert">
<i class="bi bi-exclamation-circle"></i> {{ error_message }}
</p>
{% endif %}
<p class="my-2">Already have an account? <a href="/auth/login">Login</a></p>
<div class="d-flex flex-column align-items-center">
{% if error_message %}
<p class="alert alert-warning small" role="alert">
<i class="bi bi-exclamation-circle"></i> {{ error_message }}
</p>
{% endif %}
<p class="my-2">
Already have an account? <a href="/auth/login">Login</a>
</p>
</div>
</form>
</main>
{% endblock content %}
from django.urls import path
from authentications.views import login, sign_up, logout
from authentications.views import AuthView
urlpatterns = [
path("login/", login, name="login"),
path("sign-up/", sign_up, name="sign_up"),
path("logout/", logout, name="logout"),
path("login/", AuthView.login, name="login"),
path("sign-up/", AuthView.sign_up, name="sign_up"),
path("logout/", AuthView.logout, name="logout"),
path("forgot-password/", AuthView.forgot_password, name="forgot_password"),
]
from django.views.generic import TemplateView
from django.http import HttpResponseRedirect
from django.shortcuts import render
from authentications.forms import LoginForm, SignUpForm
from authentications.forms import LoginForm, SignUpForm, ForgotPassword
from librarians.models import Librarians, LoginHistory
from authentications.utils import create_auth_session
def login(request):
librarian = Librarians.objects.all()
context = {"form": LoginForm()}
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
account = librarian.filter(
email=form.data["email"], password=form.data["password"]
)
if account.exists():
librarian = librarian.get(
email=form.data["email"],
password=form.data["password"],
class AuthView(TemplateView):
def login(request):
librarian = Librarians.objects.all()
context = {"form": LoginForm()}
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
account = librarian.filter(
email=form.data["email"], password=form.data["password"]
)
payload = {
"librarian_id": librarian.id,
"name": librarian.name,
"email": librarian.email,
}
create_auth_session(request, payload)
LoginHistory.objects.create(librarian_id=librarian.id)
return HttpResponseRedirect("/dashboard/")
else:
context["error_message"] = (
"Email or Password invalid, please enter valid data or Sign Up first"
)
else:
form = LoginForm()
return render(request, "login.html", context)
if account.exists():
librarian = librarian.get(
email=form.data["email"],
password=form.data["password"],
)
payload = {
"librarian_id": librarian.id,
"name": librarian.name,
"email": librarian.email,
}
create_auth_session(request, payload)
def sign_up(request):
librarian = Librarians.objects.all()
context = {"form": SignUpForm()}
if request.method == "POST":
form = SignUpForm(request.POST)
if form.is_valid():
is_email = librarian.filter(email=form.data["email"])
LoginHistory.objects.create(librarian_id=librarian.id)
return HttpResponseRedirect("/dashboard/")
else:
context["error_message"] = (
"Email or Password invalid, please enter valid data or Sign Up first"
)
else:
form = LoginForm()
if is_email.exists():
context["error_message"] = (
"Email was already exist, please use different email"
)
else:
librarian.create(
name=form.data["name"],
email=form.data["email"],
password=form.data["password"],
)
new_librarian = librarian.get(
name=form.data["name"],
email=form.data["email"],
password=form.data["password"],
)
return render(request, "login.html", context)
def sign_up(request):
librarian = Librarians.objects.all()
context = {"form": SignUpForm()}
if request.method == "POST":
form = SignUpForm(request.POST)
if form.is_valid():
is_email = librarian.filter(email=form.data["email"])
payload = {
"librarian_id": new_librarian.id,
"name": new_librarian.name,
"email": new_librarian.email,
}
create_auth_session(request, payload)
if is_email.exists():
context["error_message"] = (
"Email was already exist, please use different email"
)
else:
librarian.create(
name=form.data["name"],
email=form.data["email"],
password=form.data["password"],
)
new_librarian = librarian.get(
name=form.data["name"],
email=form.data["email"],
password=form.data["password"],
)
LoginHistory.objects.create(librarian_id=new_librarian.id)
return HttpResponseRedirect("/dashboard/")
else:
form = SignUpForm()
payload = {
"librarian_id": new_librarian.id,
"name": new_librarian.name,
"email": new_librarian.email,
}
create_auth_session(request, payload)
return render(request, "sign_up.html", context)
LoginHistory.objects.create(librarian_id=new_librarian.id)
return HttpResponseRedirect("/dashboard/")
else:
form = SignUpForm()
return render(request, "sign_up.html", context)
def logout(request):
del request.session["auth_session"]
return HttpResponseRedirect("/auth/login")
def forgot_password(request):
librarian = Librarians.objects.all()
context = {"form": ForgotPassword()}
if request.method == "POST":
form = ForgotPassword(request.POST)
if form.is_valid:
account = librarian.filter(
email=form.data["email"], password=form.data["old_password"]
)
if account.exists():
if form.data["old_password"] == form.data["new_password"]:
context["error_message"] = (
"Old and New password cannot be same!"
)
else:
try:
librarian.update(password=form.data["new_password"])
context["message"] = (
"Change password success, now lets try login!"
)
except:
context["error_message"] = (
"Change password failed, please try again later."
)
else:
context["error_message"] = (
"Account with email and old password not found, please enter valid data!"
)
def logout(request):
del request.session["auth_session"]
return HttpResponseRedirect("/auth/login")
return render(request, "forgot-password.html", context)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment