利用內建函數app.before_request 搭配 session 在每次頁面載入前檢測使用者狀態,如果你在學習Python Flask網頁,希望本篇教學對你有幫助。
Table
什麼是 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使用方法和介紹,當然接下來也會有詳細的介紹
1 2 3 4 5 6 7 8 9 10 11 |
@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登入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@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過期時才不會因為沒有登入,就可以直接進入頁面!
1 2 3 4 5 |
# 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粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!