Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
library-app-django
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ilham Maulana
library-app-django
Commits
6ec35b41
Commit
6ec35b41
authored
Jul 01, 2024
by
impfundev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: forgot password
parent
288fedef
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
193 additions
and
86 deletions
+193
-86
forms.py
authentications/forms.py
+27
-0
forgot-password.html
authentications/templates/forgot-password.html
+39
-0
login.html
authentications/templates/login.html
+11
-8
sign_up.html
authentications/templates/sign_up.html
+10
-6
urls.py
authentications/urls.py
+5
-4
views.py
authentications/views.py
+101
-68
No files found.
authentications/forms.py
View file @
6ec35b41
...
...
@@ -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"
,
}
)
)
authentications/templates/forgot-password.html
0 → 100644
View file @
6ec35b41
{% 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 %}
authentications/templates/login.html
View file @
6ec35b41
...
...
@@ -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 %}
authentications/templates/sign_up.html
View file @
6ec35b41
...
...
@@ -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 %}
authentications/urls.py
View file @
6ec35b41
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"
),
]
authentications/views.py
View file @
6ec35b41
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
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment