di Django, kita bisa menggunakan authentication framework
untuk membuat aksi-aksi seperti login
, logout
dan sebagainya. biasanya saat kita memanfaatkan view built-in django.contrib.auth.views.login
untuk login, kita hanya boleh login dengan username
dan password
secara default. nah bagaimana misalnya dalam suatu proyek, aplikasi yang kita buat juga bisa menggunakan username
, email
dan password
? di sini saya mau mengucapkan terimakasih kepada Antonio Mele yang mau berbagi bagaimana membuat Authentication Backend agar email
user bisa digunakan untuk login.
di sini saya punya project bernama bookmarks
dan aplikasi bernama account
. sekarang buat terlebih dahulu file auth backendnya bernama authentication.py
di dalam direktori account
lalu isikan dengan kode berikut ini:
from django.contrib.auth.models import User
class EmailAuthBackend(object):
"""
Authenticate using e-mail account.
"""
def authenticate(self, username=None, password=None):
try:
user = User.objects.get(email=username)
if user.check_password(password):
return user
return None
except User.DoesNotExist:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
sebagai catatan, file auth backend selalu memiliki dua method yaitu method authenticate
dan get_user
. pada method authenticate
saya memberikan pernyataan user = User.objects.get(email=username)
untuk mendapatkan object user dari emailnya karena di sini username
juga bisa berisi email user dan ini ditangani oleh Backend yang kita buat sedangkan username aslinya ditangani oleh Backend default Django. setelah itu kita akan menggunakan objek user ini untuk pengecekan password. kalau password sesuai dengan email yang di masukan, maka method ini mengembalikan objek user. sebaliknya, method ini akan mengembalikan None
jika email dan username tidak cocok.
dan untuk method get_user
sendiri digunakan oleh Django untuk membuat durasi session user. karena method ini mengembalikan objek user dari id
nya.
oke, setelah itu buka file settings.py
dari direktori proyek bookmarks
dan tambahkan:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'account.authentication.EmailAuthBackend',
)
nah sekarang user sudah bisa login menggunakan email dan password mereka. cara ini juga merupakan alternatif lain jika kita memiliki proyek di sekolah. bagaimana seorang murid bisa login ke dalam situs kesiswaan dengan nis
dan password
mereka. atau bahkan bisa diterapkan untuk mahasiswa agar mahasiswa bisa login ke situs student mereka dengan nim
dan password
mereka.