Cara menggunakan python3-openid

Setelah mempraktekkan membuat formulir pendaftaran user menggunakan built-in django yaitu UserCreationForm, sekarang kita akan mencoba membuat user registration, login, dan logout menggunakan modul django allauth.

Daftar Isi

Dengan menggunakan django allauth, pada website yang dibangun. User registration dan login selain menggunakan email dan username, juga bisa menggunakan sosial akun. Jadi, akan memberikan beberapa pilihan metode pendaftaran. Ada sangat banyak akun sosial media yang bisa digunakan untuk mendaftar di sini. Di antaranya bisa menggunakan akun Google, Facebook, Twitter, dan lainnya.

Baca Juga:

  1. Pendaftaran User Django
  2. Django Custom Pendaftaran User

Membuat Login dan Logout dengan Django Allauth

Karena kita menggunakan modul tambahan, tentu saja pertama harus install terlebih dahulu modulnya.

pip install django-allauth

Django allauth membutuhkan beberapa dependency, diantaranya urllib3, python3-openid, cryptography, certifi, dan lainnya. Tapi kamu tidak perlu repot install satu persatu, karena otomatis akan juga diinstall saat kamu install django allauth.

Kamu bisa membuka file settings.py setelah sukses menginstall django allauth, untuk menambahkan beberapa pengaturan yang dibutuhkan.

Pada INSTALLED_APPS, tambahkan beberapa baris berikut dan provider sosial akun yang diijinkan digunakan mendaftar pada website kamu. Misalnya facebook, google, dan twitter. Pastikan juga 'django.contrib.sites', terdapat pada daftar apps yang terinstall.

    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',

Masih pada file settings.py tambahkan juga kode berikut

SITE_ID = 1
AUTHENTICATION_BACKENDS = [
    # Needed to login by username in Django admin, regardless of `allauth`
    'django.contrib.auth.backends.ModelBackend',

    # `allauth` specific authentication methods, such as login by e-mail
    'allauth.account.auth_backends.AuthenticationBackend',
]

Kemudian kamu atur credentials akun sosial yang berupa api key, atau secret key tergantung dari providernya.

SOCIALACCOUNT_PROVIDERS = {
    'facebook': {
        'METHOD': 'oauth2',
        'SDK_URL': '//connect.facebook.net/{locale}/sdk.js',
        'SCOPE': ['email', 'public_profile'],
        'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
        'INIT_PARAMS': {'cookie': True},
        'FIELDS': [
            'id',
            'first_name',
            'last_name',
            'middle_name',
            'name',
            'name_format',
            'picture',
            'short_name'
        ],
        'EXCHANGE_TOKEN': True,
        'LOCALE_FUNC': 'path.to.callable',
        'VERIFIED_EMAIL': False,
        'VERSION': 'v7.0',
    }
    'google': {
        # For each OAuth based provider, either add a ``SocialApp``
        # (``socialaccount`` app) containing the required client
        # credentials, or list them here:
        'APP': {
            'client_id': '123',
            'secret': '456',
            'key': ''
        }
    }
}

Untuk pengaturan lebih lanjut dari masing-masing provider, kamu baca dokumentasi resmi django-allauth.

Ok, sekarang saya menambahkan kode berikut ini

ACCOUNT_AUTHENTICATION_METHOD = "username"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = None
ACCOUNT_USERNAME_MIN_LENGTH = 4
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = 5
ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 300
ACCOUNT_USERNAME_BLACKLIST = ['admin', 'staff', 'administrator']
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_REQUIRED = True

ACCOUNT_AUTHENTICATION_METHOD: Metode spesifik untuk mengautentikasi user, pada contoh saya menggunakan username. Kamu bisa mengganti dengan email kalau metode autentikasi menggunakan email dan password saat login, dan bisa juga keduanya dengan value

    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
0

ACCOUNT_EMAIL_REQUIRED: Pada saat registrasi, user diminta untuk memasukkan email atau tidak. Jika tidak valuenya False dan jika diminta valuenya True.

ACCOUNT_EMAIL_VERIFICATION: Ada tida opsi yaitu None, Optional, dan Mandatory. Kalau diisi dengan None, berarti user langsung aktif tanpa melakukan verifikasi email. Untuk Optional, saat user berhasil mendaftar, django-allauth tetap akan mengirimkan email verifikasi namun user sudah bisa login tanpa verifikasi email. Dan pilihan mandatory user akan dikirim email verifikasi dan harus melakukan verifikasi untuk bisa login. Dan pilihan mandatory membutuhkan

    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
1

ACCOUNT_UNIQUE_EMAIL: Kamu pasti sudah paham dengan ini, untuk nilai True artinya hanya satu email untuk satu akun, dan False yang berarti membolehkan satu email untuk banyak akun.

ACCOUNT_USERNAME_MIN_LENGTH: Jumlah karakter minimum yang dibolehkan untuk membuat username.

ACCOUNT_LOGIN_ATTEMPTS_LIMIT: Berapa kali user boleh melakukan percobaan login dengan kesalahan. Jika melebihi batas limit yang ditentukan, user tersebut tidak bisa login lagi sampai batas waktu pada

    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
2 terlampaui. Dan perlu kalian ketahui, ini hanya memproteksi login view. Untuk django admin, tidak berlaku.

ACCOUNT_USERNAME_BLACKLIST: Berguna untuk mencegah pemalsuan akun pada website kamu, jangan sampai ada yang menyamar menjadi admin website dan merugikan user lainnya. Maka username yang dilarang untuk digunakan user lain, tambahkan di sini.

SOCIALACCOUNT_EMAIL_REQUIRED: Mungkin membutuhkan email untuk mengirim newsletter atau notifikasi ke user, maka beri nilai True.

Yang selanjutnya jalankan migrate

(env) edi@edikartono:~/Django/proyek$ python manage.py migrate
Operations to perform:
  Apply all migrations: account, accounts, admin, auth, buah, contenttypes, sessions, sites, socialaccount
Running migrations:
  Applying account.0001_initial... OK
  Applying account.0002_email_max_length... OK
  Applying sites.0001_initial... OK
  Applying sites.0002_alter_domain_unique... OK
  Applying socialaccount.0001_initial... OK
  Applying socialaccount.0002_token_max_lengths... OK
  Applying socialaccount.0003_extra_data_default_dict... OK
(env) edi@edikartono:~/Django/proyek$ 

Masih di file settings.py, mungkin kamu perlu mengatur agar ketika user mengakses halaman tertentu yang harus login. Namun saat itu user belum login, maka akan diarahkan ke halaman login. Maka tambahkan kode berikut.

LOGIN_REDIRECT_URL = "/accounts/profile/"
LOGOUT_REDIRECT_URL = "/accounts/login/"

LOGIN_REDIRECT_URL: akan mengarahkan user ke halaman accounts/profile/ ketika berhasil login. Kecuali sebelum login, user mengakses halaman yang harus logn, tapi user belum login. Maka ketika berhasil login, user akan diarahkan ke halaman itu kembali, tidak ke accounts/profile/

Form Django Allauth

Sebelumnya kita sudah melakukan beberapa pengaturan, mulai dari menmabahkan django-allauth di INSTALLED_APPS dan pengaturan lainnya. Django allauth sendiri memiliki default form seperti ini

ACCOUNT_FORMS = {
    'login': 'allauth.account.forms.LoginForm',
    'signup': 'allauth.account.forms.SignupForm',
    'add_email': 'allauth.account.forms.AddEmailForm',
    'change_password': 'allauth.account.forms.ChangePasswordForm',
    'set_password': 'allauth.account.forms.SetPasswordForm',
    'reset_password': 'allauth.account.forms.ResetPasswordForm',
    'reset_password_from_key': 'allauth.account.forms.ResetPasswordKeyForm',
    'disconnect': 'allauth.socialaccount.forms.DisconnectForm',
}

Kamu yang tidak membutuhkan field tambahan, sudah bisa langsung gunakan form tersebut beserta templatenya. Tapi karena tidak menggunakan css maka tampilannya seperti ini

 

  • Signup

    Cara menggunakan python3-openid

  • Login

    Cara menggunakan python3-openid

  • Logout

    Cara menggunakan python3-openid

Supaya halaman accounts/login/ dan lainnya seperti ini

Cara menggunakan python3-openid

Buatlah sebuah path pada file urls.py di project directory dengan menambahkan

    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
3

Template

Baca juga: Template Inheritance

Supaya memiliki tampilan yang enak dipandang mata, maka kita tentu saja perlu menambahkan css. Dan agar bisa menambahkan css, maka kamu perlu membuat template pada direktori templates buat folder baru bernama

    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
4. Selanjutnya membuat file login.html, signup.html, dan logout.html.

Atau kamu bisa mengcopy saja dari virtual environment kamu, /env/lib64/python3.7/site-packages/allauth/templates/ boleh semua atau hanya di dalam direktori account saja dan paste pada templates/account/

Kemudian pada file base.html, tinggal diedit sedikit misalnya menambahkan file css dan sebagainya.

Ringkasan

Jadi, membuat form pada django untuk user registration, login, logout dengan django allauth caranya cukup mudah. Tentu yang pertama menginstall menggunakan PIP, mendaftarkannya di INSTALLED_APPS, mengatur sesuatu yang dibutuhkan pada file settings.py, migrate, dan menghubungkan urlsnya.

Semua langkah itu sudah selesai, django dengan django-allauth sudah siap menerima pendaftaran user, sekaligus dengan metode login dan logoutnya.

Ketika kamu perlu mengcustom templatenya, cara mudahnya, copy saja file template django-allauth ke dalam direktori templates/account