Rumah >pembangunan bahagian belakang >Tutorial Python >Cara Melakukan Pengesahan Pengguna dengan Flask-Login

Cara Melakukan Pengesahan Pengguna dengan Flask-Login

Lisa Kudrow
Lisa Kudrowasal
2025-02-09 08:47:13519semak imbas

Cara Melakukan Pengesahan Pengguna dengan Flask-Login

Dalam artikel ini, kami akan melihat pelbagai ciri yang ditawarkan oleh Flask-Login dan cara menggunakannya untuk membuat fungsi login pengguna yang selamat untuk aplikasi web anda. Menjelang akhir artikel ini, anda akan mempunyai pemahaman yang baik tentang cara menggunakan flask-login untuk melaksanakan pengesahan pengguna yang selamat dalam aplikasi flask anda.

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

    Kemudahan Pengesahan dengan Flask-Login: Flask-Login Memudahkan pelaksanaan Pengesahan Pengguna dalam Aplikasi Flask. Ia menyediakan ciri -ciri penting seperti pengurusan sesi pengguna, fungsi login/logout mudah, dan panggilan balik pemuat pengguna untuk integrasi lancar dengan pangkalan data. Ini membantu dalam menguruskan sesi pengguna dengan cekap dan mengendalikan proses pengesahan.
  • Pengendalian kata laluan selamat dan pengurusan sesi pengguna: Kami akan memperincikan kepentingan keselamatan kata laluan menggunakan flask-bcrypt untuk kata laluan hashing, dan bagaimana flask-Login menguruskan sesi pengguna dengan cookies sesi. Ini memastikan bahawa kelayakan pengguna disimpan dengan selamat dan sesi pengguna dijejaki dengan tepat, meningkatkan keselamatan keseluruhan aplikasi.
  • Panduan Pelaksanaan Praktikal: Kami menyediakan panduan yang komprehensif untuk menubuhkan dan menggunakan flask-login, termasuk membuat model pengguna, mengkonfigurasi pangkalan data (SQLite), mewujudkan pandangan untuk pendaftaran pengguna dan log masuk, dan melaksanakan logik log keluar dengan laluan yang dilindungi. Ia memberikan pendekatan praktikal untuk membina sistem pengesahan pengguna yang selamat dalam aplikasi flask, menjadikannya mudah untuk mereka yang baru untuk pembangunan aplikasi atau aplikasi web.
Mengapa menggunakan Flask-Login?

Flask-Login mempunyai beberapa ciri dan fungsi yang memudahkan untuk melakukan pengesahan dengan lancar dalam aplikasi Flask. Berikut adalah beberapa manfaat menggunakan Flask-Login:

  • Pengurusan Sesi Pengguna. Flask-Login mengendalikan penciptaan dan pemusnahan sesi pengguna. Ia juga boleh menyimpan ID pengguna semasa dalam sesi supaya anda dapat dengan mudah menyemak sama ada pengguna log masuk.
  • fungsi log masuk dan logout. Flask-Login menyediakan fungsi log masuk dan logout terbina dalam. Fungsi -fungsi ini menjaga semua proses penting, seperti membuat dan memusnahkan sesi dan mengalihkan pengguna ke halaman yang sesuai.
  • Panggil balik Loader Pengguna. Flask-Login membolehkan anda menentukan panggilan balik loader pengguna. Panggilan balik ini digunakan untuk memuatkan objek pengguna untuk sesi semasa. Ini berguna jika anda menggunakan pangkalan data untuk menyimpan maklumat pengguna.
  • Pengesahan dan kebenaran. Flask-Login memudahkan untuk melaksanakan pengesahan dan kebenaran dalam aplikasi anda. Anda boleh menggunakan flask-login untuk melindungi halaman atau laluan tertentu dan memberi pengguna tahap akses yang berbeza ke aplikasi anda.

Prasyarat

untuk mengikuti lama dengan artikel ini, anda memerlukan yang berikut:

  • Pengetahuan mengenai sintaks python dan flask
  • Pengetahuan asas HTML dan CSS
  • versi python 3 dan flask dipasang

Jelas sekali anda juga memerlukan akses kepada penyemak imbas web.

Bermula

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:

  • Flask-Sqlalchemy: Mengintegrasikan SQLalchemy dengan Flask untuk Operasi Pangkalan Data
  • flask-bcrypt: tambah hashing bcrypt untuk keselamatan kata laluan dalam kelalang

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.

Membuat Model 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:

  • id unik
  • nama pengguna
  • kata laluan (hashed)
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.

Membuat pangkalan data

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:

  1. Untuk menggunakan pangkalan data SQLite, anda perlu menetapkan URI dalam konfigurasi aplikasi Flask anda. Ini biasanya dilakukan di bahagian atas, bersama konfigurasi lain. Berikut adalah coretan yang boleh anda gunakan:
    <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.

  2. Seterusnya, anda perlu memulakan Orm Flask-Sqlalchemy menggunakan coretan ini:
    <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).

  3. Untuk membuat pangkalan data ini, kita perlu memulakan pangkalan data, menggunakan kaedah create_all:
    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 /.

    Cara Melakukan Pengesahan Pengguna dengan Flask-Login

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

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.

bagaimana hash dan sahkan kata laluan menggunakan flask-bcrypt

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

Membuat paparan daftar

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:

  • Pada baris pertama, kami menentukan laluan untuk laluan URL /Login. Laluan ini menerima permintaan GET dan pos. Fungsi log masuk (), yang dikaitkan dengan laluan, akan dilaksanakan apabila permintaan dibuat.
  • Seterusnya, kami mengesahkan jika kaedah permintaan adalah kaedah pos:
    <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>
  • Ia kemudian menanyakan pangkalan data untuk pengguna dengan nama pengguna yang disediakan. Sekiranya pengguna dengan nama pengguna yang disediakan dijumpai dan kata laluan sepadan, kod di dalam blok ini akan dilaksanakan.

Membuat paparan log masuk

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:

  • di baris pertama - @app.route (' /login', kaedah = ['get', 'post']): - Kami menggunakan penghias yang mentakrifkan laluan untuk laluan URL /Login . Laluan ini menerima permintaan GET dan pos. Fungsi yang berkaitan, login (), akan dilaksanakan apabila permintaan dibuat ke laluan ini.
  • fungsi log masuk () bermula dengan menyemak sama ada kaedah permintaan adalah pos:
    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>
  • Ia kemudian menanyakan pangkalan data untuk pengguna dengan nama pengguna yang disediakan:
    <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>
  • Jika kedua-dua nama pengguna dan kata laluan disahkan, pengguna diberikan akses menggunakan fungsi login_user dan redirect Flask-Login:
    <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>
  • Walau bagaimanapun, jika kaedah permintaan tidak diposkan atau butirannya tidak betul, ia membuat templat login.html:
  • 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.

Membuat logik logout menggunakan paparan yang dilindungi

Dalam kebanyakan aplikasi, beberapa halaman tidak dapat diakses jika pengguna tidak log masuk. Ini termasuk halaman seperti sejarah transaksi, draf, dan halaman logout. Flask-Login menyediakan cara yang mudah untuk melindungi halaman/laluan ini dan menyekat akses kepada pengguna yang disahkan menggunakan penghias Login_required. Berikut adalah pecahan bagaimana ia berfungsi.

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:

    Sama seperti dalam paparan login, @app.route (' /logout') mentakrifkan laluan untuk laluan URL /logout.
  • Seterusnya, kami menambah penghias Login_required yang memastikan pengguna mesti log masuk untuk mengakses laluan logout. Sekiranya pengguna tidak log masuk dan cuba mengakses laluan ini, mereka akan diarahkan ke halaman log masuk.
  • Di dalam fungsi logout, logout_user () dipanggil. Fungsi ini disediakan oleh Flask-Login dan digunakan untuk log pengguna semasa.
  • Selepas log keluar pengguna, fungsi mengalihkannya ke laluan masuk menggunakan redirect (url_for ('login')). ​​
Jadi, apabila pengguna mengakses laluan /logout, Flask-Login memastikan mereka log masuk (@login_required), log keluar, dan mengalihkannya ke halaman log masuk. Ini membantu mengendalikan logout pengguna dengan selamat dalam aplikasi Flask anda. Penghias Login_Required digunakan untuk laluan /dilindungi, menunjukkan bahawa hanya pengguna yang disahkan boleh mengaksesnya. Dan jika pengguna cuba mengakses halaman yang dilindungi tanpa dilog masuk, Flask-Login akan mengalihkannya ke halaman log masuk.

Menambah templat

Templat dalam Flask membolehkan anda menggunakan halaman HTML untuk menentukan bagaimana laman web anda akan kelihatan. Untuk melaksanakan sepenuhnya logik dalam fail app.py kami, kami akan membuat halaman HTML yang digambarkan di bawah.

Cara Melakukan Pengesahan Pengguna dengan Flask-Login 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.

bagaimana flask-login menguruskan sesi pengguna dengan cookies sesi pengguna

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.

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn