Rumah >pembangunan bahagian belakang >Tutorial Python >Cara Melakukan Pengesahan Pengguna dengan Flask-Login
Pengesahan adalah bahagian penting dari mana -mana aplikasi web yang membolehkan pengguna mengakses data atau sumber kerana ia hanya memastikan bahawa hanya orang yang tepat mendapat akses kepada maklumat sensitif. Ini juga boleh dicapai dalam kelalang menggunakan flask-login.
Flask-Login adalah lanjutan dalam flask dengan fungsi yang mengendalikan pembalakan dan keluar dari pengguna dan menjejaki pengguna semasa sepanjang aplikasi. Ini memudahkan untuk melaksanakan pengesahan dan kebenaran dalam aplikasi flask anda.
Takeaways Key
untuk mengikuti lama dengan artikel ini, anda memerlukan yang berikut:
Jelas sekali anda juga memerlukan akses kepada penyemak imbas web.
Untuk menggunakan sepenuhnya modul log masuk flask, kita perlu mempunyai flask-login dan lain-lain kebergantungan yang diperlukan dipasang. Perpustakaan ini menyediakan fungsi dan alat yang diperlukan untuk meningkatkan fungsi aplikasi anda. Untuk memasangnya, buka command prompt atau terminal anda dan laksanakan arahan PIP berikut:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
Berikut adalah pecahan apa yang setiap perpustakaan ini digunakan untuk:
Setelah pemasangan selesai, ia secara automatik akan mempunyai log masuk flask yang dimuat turun dalam direktori yang anda gunakan.
Nota: Pada masa penulisan, terdapat sedikit masalah dalam menyelesaikan kebergantungan dalam versi terkini Flask dan Werkzeug. Untuk menyelesaikannya, anda perlu memaksa memasang versi 2.3.0 dari Werkzeug, kerana ia adalah satu -satunya versi yang diketahui berfungsi sekarang.
Setelah dependensi anda telah dipasang, anda perlu memulakannya dengan aplikasi Flask anda:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
Dalam coretan kod di atas, kami juga telah memulakan objek LoginManager dalam permohonan kami. LoginManager adalah lanjutan flask-login yang digunakan untuk menubuhkan konfigurasi yang diperlukan untuk mengendalikan sesi pengguna.
Model adalah perwakilan struktur data yang anda ingin gunakan dalam aplikasi anda. Ia mentakrifkan bagaimana data dianjurkan, disimpan, dan dimanipulasi dalam sistem. Model biasanya digunakan dengan pangkalan data yang mengikuti struktur yang ditakrifkan terlebih dahulu. Untuk aplikasi kami, kami mempunyai data berikut:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
Anda juga boleh menambah sifat tambahan kepada model pengguna anda, seperti alamat e -mel atau gambar profil, bergantung pada skop projek anda.
Sebaik sahaja anda telah menentukan model pengguna anda, anda perlu membuat pangkalan data yang akan menyimpan struktur data yang kami buat dalam model sebelumnya.
Untuk artikel ini, kami akan menggunakan pangkalan data SQLite. Ini kerana SQLite adalah enjin pangkalan data ringan dan tanpa pelayan. Ini menjadikannya mudah untuk ditubuhkan dan digunakan, kerana ia tidak memerlukan pemasangan yang berasingan. Ia juga merupakan pilihan yang baik untuk aplikasi kecil hingga sederhana.
Berikut adalah pecahan langkah -langkah untuk menggunakan pangkalan data SQLite dalam aplikasi kami:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
Dalam coretan ini, /// ... menunjukkan laluan relatif ke fail anda - site.db - yang merupakan nama yang kami gunakan untuk fail pangkalan data SQLite kami. Nama ini boleh ditukar kepada apa sahaja yang anda sukai.
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
SQLalChemy adalah pemetaan objek-relasi yang menyediakan satu set alat untuk bekerja dengan pangkalan data menggunakan Python. Talian db = sqlalchemy (app) mencipta contoh kelas sqlalchemy dan mengikatnya ke aplikasi flask anda (app).
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
Kod ini biasanya diletakkan pada akhir skrip Python anda atau dalam skrip berasingan yang didedikasikan untuk memulakan pangkalan data. Sebaik sahaja anda menjalankan skrip anda, fail pangkalan data akan dibuat dengan jadual yang sepadan berdasarkan model yang kami tentukan sebelumnya.
Dalam kes ini, kod akan membuat fail Site.db dengan jadual pengguna jika ia belum wujud. Fail site.db biasanya datang dalam folder yang dipanggil /instance /.
Seterusnya, kita perlu membuat user_loader yang mengambil ID pengguna dan mengembalikan objek pengguna yang sepadan. Berikut adalah contoh:
db <span>= SQLAlchemy(app)</span>
Hashing Kata Laluan adalah langkah keselamatan yang menyimpan perwakilan kriptografi kata laluan pengguna sebelum ia disimpan dalam pangkalan data. Dengan cara ini, ia menjadi lebih sukar untuk mendapatkan kata laluan sebenar walaupun keselamatan aplikasi telah dikompromi.
Biasanya, kata laluan pertama kali hash dalam proses pendaftaran dan disimpan dalam pangkalan data. Kemudian, setiap kali pengguna log masuk, kata laluan mereka telah dimakan semula dan dibandingkan dengan kata laluan hashed yang disimpan dalam pangkalan data. Sekiranya kedua -dua kata laluan sepadan, pengguna disahkan dan diberi akses kepada aplikasi.
Flask mempunyai lanjutan yang dipanggil Flask-Bcrypt yang membantu mencapai fungsi ini. Ia mempunyai dua fungsi utama: penjana_password_hash () dan check_password_hash ().
fungsi theGenerate_password_hash () mengambil kata laluan pengguna sebagai hujah dan mengembalikan kata laluan hashed. Ini biasanya digunakan dalam logik pendaftaran.
fungsi check_password_hash () mengambil kata laluan dan kata laluan hashed sebagai argumen dan mengembalikan benar jika kedua -dua kata laluan sepadan, atau palsu jika mereka tidak sepadan. Ini dipanggil sebelum memberikan akses kepada paparan log masuk
Pandangan adalah sebahagian daripada kerangka flask yang digunakan untuk menghasilkan HTML, JSON, atau data lain yang dihantar kepada penyemak imbas pengguna. Dalam coretan kod ini, kami akan membuat pandangan yang menerima input pengguna dan menambah butiran ke pangkalan data:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
Berikut adalah pecahan kod:
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
Sebaik sahaja ia disahkan, fungsi mengambil nilai yang dimasukkan oleh pengguna dalam bentuk log masuk:
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
Dalam paparan log masuk, kami membuat logik yang menerima input dari halaman dan kemudian memeriksa jika input sepadan dengan mana -mana baris dalam pangkalan data:
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>
Berikut adalah pecahan bagaimana kod berfungsi:
db <span>= SQLAlchemy(app)</span>
Sekali, ia mengesahkan bahawa ia adalah permintaan pos, ia mengambil nilai -nilai yang dimasukkan oleh pengguna dalam bentuk log masuk:
pip <span>install flask-login flask_sqlalchemy flask_bcrypt</span>
<span>from flask_sqlalchemy import SQLAlchemy </span> <span>from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required </span> <span>from flask_bcrypt import Bcrypt </span> <span>from flask_login import LoginManager </span> app <span>= Flask(__name__) </span> login_manager <span>= LoginManager() </span> login_manager<span>.init_app(app) </span>
<span>class User(UserMixin): </span> <span>id = db.Column(db.Integer, primary_key=True) </span>username <span>= db.Column(db.String(64), unique=True) </span>password_hash <span>= db.Column(db.String(128)) </span> <span>def __repr__(self): </span> <span>return <span>f'<User <span>{self.username}</span>>'</span></span>
app<span>.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # Using SQLite as the database</span>Pada dasarnya, ia memeriksa jika kelayakan yang dimasukkan sah, log pengguna masuk, dan mengalihkannya ke halaman Selamat Datang jika berjaya. Sekiranya log masuk tidak berjaya atau permintaan GET, ia menjadikan templat log masuk untuk pengguna memasukkan kelayakan mereka.
Untuk menggunakan fungsi ini, anda perlu mengimport penghias Login_Required dari Flask-Login:
db <span>= SQLAlchemy(app)</span>Seterusnya, anda perlu menambah penghias Login_Required ke mana -mana laluan yang anda mahu lindungi. Sebagai contoh, mari buat halaman logout yang hanya boleh diakses apabila pengguna dilog masuk:
<span>if __name__ == '__main__': </span> db<span>.create_all() </span> app<span>.run(debug=True)</span>Berikut adalah pecahan bagaimana ia berfungsi:
Menambah templat
Animasi di bawah menunjukkan bagaimana templat menjadikan halaman yang berbeza dari laman web kami.
Anda dapat melihat kod penuh untuk tutorial ini dan mengetahui lebih lanjut mengenai pelaksanaannya dalam repositori GitHub artikel ini.
Sesi pengguna adalah sistem yang digunakan untuk mengesan dan mengemas kini maklumat pengguna semasa pengguna dilog masuk. Flask-Login menguruskan sesi ini dengan menyimpan cookie sesi pada penyemak imbas pengguna. Cookie Sesi adalah sekeping data kecil yang mengandungi pengecam unik untuk sesi pengguna.
Apabila pengguna log masuk ke laman web menggunakan Flask-Login, pelayan menghasilkan cookie sesi dan menghantarnya ke penyemak imbas pengguna. Penyemak imbas menyimpan cookie sesi dan memasukkannya dalam semua permintaan ke pelayan. Pelayan menggunakan cookie sesi untuk mengenal pasti pengguna dan keadaan sesi mereka.
Sebagai contoh, jika pengguna dilog masuk dan melawat halaman yang dilindungi oleh Flask-Login, Flask-Login akan menyemak cookie sesi untuk melihat apakah pengguna disahkan. Jika pengguna disahkan, Flask-Login akan memuatkan maklumat profil pengguna dari pangkalan data dan menjadikannya tersedia untuk paparan. Jika pengguna tidak disahkan, Flask-Login akan mengalihkan pengguna ke halaman log masuk.
Apabila pengguna log keluar dari laman web, pelayan memadamkan cookie sesi dari pelayar pengguna, yang menamatkan sesi pengguna.
Flask menawarkan pelbagai fungsi yang menangani pelbagai aspek pengesahan, mulai dari pengurusan sesi pengguna hingga kebenaran. Dengan menggunakan fungsi ini, anda boleh melaksanakan sistem pengesahan yang mantap dan selamat yang disesuaikan dengan keperluan khusus aplikasi anda.
Atas ialah kandungan terperinci Cara Melakukan Pengesahan Pengguna dengan Flask-Login. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!