跳至主要內容

[Flask教學] Flask 如何檢測使用者是否登入?

By MaxAll posts、Python Flask 教學 最後更新時間 17 6 月, 2020
flask_login_check_photo

利用內建函數app.before_request 搭配 session 在每次頁面載入前檢測使用者狀態,如果你在學習Python Flask網頁,希望本篇教學對你有幫助。

目錄

  • 什麼是 Flask app.before_request?
  • 使用者登入時設定
  • 使用者登出時設定

什麼是 Flask app.before_request?

  1. 我們利用falsk內建的函數 @app.before_request,可以在每次在入頁面前執行一件事情
  2. 首先設定request.path是在login登入頁或者是static/js或css相關頁面的時候,不用執行此檢測(return None)
  3. 其他頁面利用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('/')

使用者登入時設定

  1. 以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 相關教學:

  • 【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粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!

flaskflask google loginflask google login checkflask教學

文章導覽

[Flask教學] Flask Session 使用方法和介紹
【Python教學】pip install 指令大全