Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## 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:
- ```python
- 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:
- ```python
- 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.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement