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 Nonesebagai 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.