Skip to main content

5. Flask and Authentication.html

Flask and Authentication

 

Pendahuluan

Hai Stupenss! Selamat datang kembali di sesi lanjutan kita tentang Flask Backend Development. Sebelumnya, kita telah mempelajari bagaimana menggunakan database dalam aplikasi Flask kita menggunakan SQLalchemy. Sekarang, saatnya melangkah lebih jauh dan menambahkan lapisan keamanan yang penting: authentication / autentikasi!

Bayangkan jika kita membangun aplikasi yang memiliki database kuat, tetapi tanpa sistem autentikasi yang solid. Pengguna akan dapat mengakses data sensitif tanpa batas, dan itu bisa berbahaya! Itulah mengapa autentikasi menjadi sangat penting dalam pengembangan aplikasi web yang aman.

Kita akan belajar library yang disediakan flask yaitu Flask-Login. Dengan Flask-Login, kita dapat dengan mudah mengelola proses autentikasi dan memberikan akses terbatas kepada pengguna yang sah. Kami akan mempelajari langkah-langkah praktis untuk mengimplementasikan autentikasi dengan Flask-Login di aplikasi Flask kita.

Jadi, siapkan pikiran terbuka, ambil secangkir kopi, dan mari kita mulai mempelajari autentikasi Flask yang menarik ini!

Apa itu Autentikasi?

Autentikasi adalah proses verifikasi identitas pengguna untuk memberikan akses ke bagian terbatas dari sebuah aplikasi web. Dalam konteks autentikasi, pengguna akan diminta untuk memberikan kredensial, seperti nama pengguna dan kata sandi, untuk membuktikan identitas mereka.

Tujuan utama autentikasi adalah memastikan bahwa hanya pengguna yang sah yang diberikan akses ke sumber daya atau fitur yang terbatas. Ini membantu melindungi informasi sensitif dan memastikan privasi pengguna.

Autentikasi dapat digunakan dalam berbagai kasus, seperti:

1.    Aplikasi dengan daftar pengguna terdaftar: Ketika pengguna mendaftar, mereka harus memasukkan informasi yang valid, seperti alamat email dan kata sandi, untuk membuat akun mereka. Ketika mereka mencoba untuk masuk, sistem memeriksa kredensial yang dimasukkan dan memvalidasi apakah pengguna tersebut telah terdaftar dan memiliki hak akses yang sesuai.

2.     Aplikasi dengan peran pengguna: Beberapa aplikasi membagi pengguna menjadi peran atau tingkatan akses yang berbeda. Autentikasi digunakan untuk memastikan bahwa pengguna memiliki hak akses yang sesuai dengan peran mereka. Misalnya, hanya administrator yang diberikan akses ke panel admin, sedangkan pengguna biasa tidak memiliki akses tersebut.

Flask_login

Flask-Login adalah ekstensi Flask yang menyediakan alat untuk mengelola otentikasi pengguna dengan mudah. Ini menyederhanakan proses autentikasi di aplikasi Flask dengan menyediakan fungsi dan dekorator yang berguna.

Manfaat menggunakan Flask-Login:

1.     Manajemen sesi: Flask-Login mengelola sesi pengguna dan menyimpan informasi yang relevan, seperti ID pengguna, dalam sesi. Ini memudahkan penggunaan dan pemeliharaan sesi di aplikasi Flask.

2.    Proteksi rute: Flask-Login menyediakan dekorator @login_required yang memastikan bahwa hanya pengguna yang terautentikasi yang dapat mengakses rute tertentu. Jika pengguna tidak terautentikasi, mereka akan diarahkan ke halaman login atau halaman lain yang ditentukan.

3.    Integrasi mudah dengan model pengguna: Flask-Login memudahkan penggunaan model pengguna yang ada di aplikasi Anda. Anda hanya perlu mengimplementasikan beberapa metode khusus di model pengguna, seperti is_authenticated() , is_active() , dan get_id() , yang diperlukan oleh Flask-Login untuk mengelola autentikasi.

Dengan menggunakan Flask-Login, Anda dapat dengan mudah mengimplementasikan fitur autentikasi di aplikasi Flask Anda dengan waktu dan upaya yang minimal. Ini menyederhanakan tugas-tugas seperti otentikasi pengguna, perlindungan rute, pengelolaan sesi, dan lainnya.

Membuat Autentikasi sederhana

Nah stupenss selanjutnya mari kita coba membuat aplikasi autentikasi sederhana ikuti langkah langkahnya ya!!

1.    Instalasi

Pertama-tama, pastikan Anda telah menginstal Flask dan Flask-Login pada virtual environment. Anda dapat menginstalnya dengan menggunakan pip:

$ pip install flask flask-login

2.    Mengatur Aplikasi Flask

Buatlah file app.py dan import modul Flask serta Flask-Login:

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
app = Flask(__name__)

Pada kode di atas, kita menginisialisasi objek Flask dan LoginManager . secret_key digunakan oleh Flask untuk keperluan sesi dan otentikasi.

3.    Konfigurasi Database

app.secret_key = 'secret_key' # Ganti dengan kunci rahasia yang lebih kuat
app.config[
'SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/database_name' db = SQLAlchemy(app)

( secret_key ) digunakan untuk menjaga sesi dan informasi pengguna tetap aman. Pengaturan SQLALCHEMY_DATABASE_URI digunakan untuk mengkonfigurasi koneksi ke database MySQL. Gantilah 'mysql://username:password@localhost/database_name' dengan informasi koneksi database yang

sesuai, jangan lupa untuk membuat database dan masukan data dummy ke dalam tabel yang teman teman buat.

4.    Inisialisasi Flask-login

login_manager = LoginManager(app)
login_manager.login_view =
'login'

Di sini, kita membuat objek LoginManager dan menginisialisasinya dengan aplikasi Flask. login_view digunakan untuk mengatur rute login yang akan digunakan oleh Flask-Login.

5. User Model

class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=
True)
username = db.Column(db.String(
100), unique=True)
password = db.Column(db.String(
100))

Model User merupakan representasi entitas pengguna dalam basis data. Dalam contoh ini, model User memiliki tiga kolom: id , username , dan password . UserMixin disertakan untuk menyediakan implementasi default dari metode-metode yang diperlukan oleh Flask-Login.

6. User Loader by ID

@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))

Decorated function load_user() digunakan untuk memuat pengguna dari ID yang disimpan dalam sesi. Fungsi ini akan digunakan oleh Flask-Login untuk memuat pengguna saat autentikasi dilakukan.

 

7. Routing

# Halaman Utama
@app.route('/')
def home():
return render_template('login.html')
# Halaman Login
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form[
'username']
password = request.form[
'password']
user = User.query.filter_by(username=username).first()
if user and user.password == password:
login_user(user)
return redirect(url_for('protected'))
else:
return 'Username atau password salah'
return render_template('login.html')
# Logout
@app.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('home'))
# Halaman terproteksi (berhasil login)
@app.route('/protected')
@login_required
def protected():
return 'Halaman terproteksi'

Di sini, kita memiliki route /login pada halaman login yang menerima metode GET dan POST. Jika metode POST, kredensial pengguna diperiksa terhadap data pengguna di database. Jika benar, pengguna akan diotentikasi menggunakan login_user() dari Flask-Login dan diarahkan ke halaman terproteksi. Jika kredensial tidak valid, pesan kesalahan akan ditampilkan. Jika metode GET, template login.html akan di render untuk menampilkan form login. Route /logout digunakan untuk logout pengguna yang sudah terautentikasi. Fungsi logout_user() dari Flask-Login digunakan untuk melaksanakan proses logout. Setelah logout, pengguna akan diarahkan kembali ke halaman utama. Route /protected adalah contoh sederhana untuk halaman terproteksi yang hanya dapat diakses oleh pengguna yang sudah terautentikasi. Dekorator @login_required dari Flask-Login digunakan untuk memastikan hanya pengguna yang sudah login yang dapat mengakses rute ini.

8. Menjalankan Aplikasi

if __name__ == '__main__':
app.run()

Bagian ini menjalankan aplikasi Flask ketika file ini dijalankan langsung. Ini memungkinkan kita menjalankan aplikasi dengan menjalankan skrip ini sebagai python app.py .

 

Hasil

Halaman awal login page yang berisi form untuk input data username dan password, disini saya akan memasukan username dan password yang benar.

Jika memasukan data yang benar maka flask_login akan melakukan autentikasi dan jika data benar maka akan diarahkan ke dalam halaman terproteksi.

namun jika data yang dimasukan salah maka akan muncul pesan username atau password salah.

Hore Stupenss! kamu telah belajar Flask and Authentication dengan menggunakan flask login, semoga materi yang disampaikan dapat dipahami ya, jika ada kesulitan

silahkan bertanya ya, jangan lupa untuk mengerjakan quiz dan di bawah juga ada referensi yang dapat kamu gunakan untuk mendalami materi! Semangat belajar Stupenss.

 

Quiz

1. Autentikasi dalam pengembangan aplikasi web digunakan untuk memastikan _________________ pengguna yang mengakses aplikasi.

 

2. Perbedaan antara autentikasi dan otorisasi adalah autentikasi adalah proses verifikasi _________________, sedangkan otorisasi adalah proses pemberian _________________ setelah autentikasi berhasil.

 

3. Flask-Login adalah ekstensi Flask yang menyediakan fungsi-fungsi untuk mengelola _________________ pengguna.

 

4. Langkah-langkah yang diperlukan untuk mengimplementasikan autentikasi dengan Flask-Login antara lain: menginisialisasi Flask-Login, membuat _________________ pengguna, memuat pengguna dari _________________, membuat rute untuk login dan logout, dan melindungi rute terproteksi dengan _________________.

 

5. Kunci rahasia (secret key) digunakan dalam aplikasi Flask untuk menjaga _________________ dan data pengguna tetap aman.

 

Referensi

https://www.digitalocean.com/community/tutorials/how-to-add-authentication-to-your-app-with-flask login

https://www.freecodecamp.org/news/how-to-authenticate-users-in-flask/

https://flask-login.readthedocs.io/

https://www.geeksforgeeks.org/how-to-add-authentication-to-your-app-with-flask-login/ https://dev.to/nagatodev/adding-authentication-to-a-flask-application-53ep

https://pypi.org/project/Flask-Login/

https://codepolitan.com/blog/menjadi-developer-web-dengan-python-dan-flask-user-login 5a6d83f309589

https://chozinthet20602.medium.com/authentication-with-flask-login-5d504af3f517

Last modified: Monday, 7 August 2023, 10:11 AM