利用內建函數app.before_request 搭配 session 在每次頁面載入前檢測使用者狀態,如果你在學習Python Flask網頁,希望本篇教學對你有幫助。
什麼是 Flask app.before_request?
- 我們利用falsk內建的函數 @app.before_request,可以在每次在入頁面前執行一件事情
- 首先設定request.path是在login登入頁或者是static/js或css相關頁面的時候,不用執行此檢測(return None)
- 其他頁面利用session.get(‘session_id’)的方式,確認是否有使用者的session存在,不存在的話將使用者導回登入頁(return redirect(‘/’))
關於Flask session的使用方法,可以參考這篇[Flask教學] Flask Session使用方法和介紹,當然接下來也會有詳細的介紹
@app.before_request
def login_required():
if request.path in ['','/','/google_sign_in'] or '/static/' in request.path:
return None
session.permanent = True
user=session.get('session_id')
g.user = user
if user==None:
print(user)
return redirect('/')
使用者登入時設定
- 以Google login為例,當使用者登入時把前端傳過來的email設定為session (session[‘session_id’] = id_info[’email’])
關於flask google login完整介紹可以參考:[Flask教學] 5分鐘上手Flask Google login登入
@app.route('/google_sign_in', methods=['POST'])
def google_sign_in():
token = request.json['id_token']
try:
# Specify the GOOGLE_OAUTH2_CLIENT_ID of the app that accesses the backend:
id_info = id_token.verify_oauth2_token(
token,
requests.Request(),
GOOGLE_OAUTH2_CLIENT_ID
)
session['session_id'] = id_info['email']
session.permanent = True
if id_info['iss'] not in ['accounts.google.com', 'https://accounts.google.com']:
print('IWrong issuer')
raise ValueError('Wrong issuer.')
except Exception as e:
# Invalid token
print('Invalid token--------',e)
raise ValueError('Invalid token')
return jsonify({}), 200
使用者登出時設定
這樣使用者Session過期時才不會因為沒有登入,就可以直接進入頁面!
# sign_out
@app.route("/sign_out", methods=['GET'])
def sign_out():
session['session_id'] = None
return redirect('/')
關於 Flask 教學的延伸閱讀:
▍關於 Flask 教學系列目錄:
▍其他 Flask 相關教學:
- 【Flask教學系列】Flask 為甚麼需要 WSGI 與 Nginx
- 【Flask教學系列】Flask-SQLAlchemy 資料庫連線&設定入門 (一)
- 【Flask教學系列】Flask-JWT-Extended 實作
- 【Flask教學系列】實作 Flask CORS
- 【Flask教學系列】實作 Flask CSRF Protection
- 【Flask教學系列】實作 Dockerfile + nginx + ssl + Flask 教學 (附GitHub完整程式)
[Flask教學] Python Flask如何檢測使用者是否登入結束囉,感謝收看,有關Max行銷誌的最新文章,都會發佈在Max的Facebook粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!