Skip to content

Instantly share code, notes, and snippets.

@agusmakmun
Forked from solanoize/auth_backend.md
Created October 11, 2016 12:08
Show Gist options
  • Save agusmakmun/d2217e75f52fee11af9fcfa3d64bad00 to your computer and use it in GitHub Desktop.
Save agusmakmun/d2217e75f52fee11af9fcfa3d64bad00 to your computer and use it in GitHub Desktop.
Menambahkan Authentication Backend di Django agar user bisa login dari emailnya

Pendahuluan

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.

Solusi

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',
)

Kesimpulan

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment