Flask 使用Flask Login驗證使用者身份

2022-09-11 11:45:17 字數 2915 閱讀 7439

flask-login提供flask的使用者會話(session)管理。它可以處理登入、登出、記住使用者長時間會話 的常見任務。

flask-login可以:

flask-login不可以:

from flask_login import loginmanager

# ...

login_manager = loginmanager()

預設情況下,flask登入使用session進行身份驗證,需要配置secret_key。

flask-login 的運轉需要應用中有user物件。要想使用 flask-login 擴充套件,應用的user模型必須實現幾個屬性和方法:

屬性/方法

說明is_authenticated

如果使用者提供的登入憑據有效,必須返回true,否則返回false

is_active

如果允許使用者登入,必須返回true,否則返回false。如果想禁用賬戶,可以返回false

is_anonymous

對普通使用者必須始終返回false,如果是表示匿名使用者的特殊使用者物件,應該返回true

get_id()

必須返回使用者的唯一識別符號,使用 unicode 編碼字串

這些屬性和方法可以直接在模型類中實現,或使用flask-login 提供的usermixin類,其中包含預設實現,能滿足多數需求:

from flask_login import usermixin

class user(usermixin, db.model):

# ...

flask-login 要求應用指定乙個函式,在擴充套件需要從資料庫中獲取指定識別符號對應的使用者時呼叫。login_manager.user_loader裝飾器把這個函式註冊給 flask-login,在這個擴充套件需要獲取已登入使用者的資訊時呼叫。傳入的使用者識別符號是個字串,因此這個函式先把識別符號轉換成整數,然後傳給 flask-sqlalchemy 查詢,載入使用者。正常情況下,這個函式的返回值必須是使用者物件;如果使用者識別符號無效,或者出現了其他錯誤,則返回none

@login_manager.user_loader

def load_user(user_id):

return user.get(user_id)

預設情況下,當使用者嘗試訪問檢視需要登陸的檢視時,如果未設定登入檢視,它將中止並顯示401錯誤。配置 login_view 後 flask-login將閃爍一條訊息並將其重定向到登入檢視。

# ...

login_manager = loginmanager()

login_manager.login_view = 'auth.login'

在檢視函式中,使用者通過身份驗證後,便可以使用該login_user功能登入:

def login():

form = loginform()

if form.validate_on_submit():

login_user(user)

flask.flash('logged in successfully.')

next = flask.request.args.get('next')

if not is_safe_url(next):

return flask.abort(400)

return flask.redirect(next or flask.url_for('index'))

return flask.render_template('login.html', form=form)

登入成功後,就可以在檢視函式模板中使用current_user**訪問登入的使用者物件:

hi }!

可以使用裝飾login_required器裝飾需要使用者登入的檢視:

@login_required

def secrets():

pass

登出並將清除其會話中的所有cookie:

@login_required

def logout():

logout_user()

return redirect(somewhere)

預設情況下,當使用者未實際登入時,current_user設定為anonymoususermixin物件。它具有以下屬性和方法:

如果對匿名使用者有自定義要求(例如,他們需要具有許可權字段),則可以提供乙個可呼叫物件(類或工廠函式),該可呼叫物件通過以下方式建立匿名使用者:

class anonymoususer(anonymoususermixin):

def can(self, permissions):

return false

def is_administrator(self):

return false

login_manager.anonymous_user = anonymoususer

flask初步使用

from flask import flask from flask import render template,redirect,url for from flask import request def login error none if request.method post if re...

flask日誌使用

from flask import flask,request import logging 設定日誌輸出到檔案中,而不是顯示到網頁 propagate exceptions false class requestformatter logging.formatter 自定義日誌格式化類,實現自定義...

flask使用快取

這裡使用redis跟flask caching,可以參考文件 huan 使用redis做快取主要是速度快,快取一些不經常變化的但訪問量大的頁面,使使用者體驗更好。安裝redis資料庫 pip install redis pip install flask caching from flask cac...