簡體   English   中英

是否可以通過代碼更改 _default_jwt_payload_handler(identity)?

[英]Is it possible to change the _default_jwt_payload_handler(identity) by code?

我在我的應用程序中使用 Flask-JWT 時遇到問題,我正在使用這樣的身份驗證和身份:

def authenticate(username, password):
  session = db.Session()
  user = session.query(db.Operators).filter_by(username= username).first()
  if user and bcrypt.check_password_hash(user.password, password):
    return user

def identity(payload):
  user_id = payload['identity']
  session = db.Session()
  return session.query(db.Operators).filter_by(idOperator= user_id)

但是我得到一個錯誤,因為我的數據庫表中沒有 id 字段,因為我有一個 idOperator

我怎么解決這個問題? _default_jwt_payload_handler(identity) function 去尋找一個 Id 字段,如何在不更改 flask-jwt 的 init.py 的情況下將這個自動 id 字段更改為 IdOperator?

謝謝

您可以使用jwt_payload_handler裝飾器指定自己的有效負載處理程序。

例如,模仿默認行為,但使用idOperator可能看起來像這樣:

jwt = JWT(app, authenticate, identity)

@jwt.jwt_payload_handler
def make_payload(identity):
    iat = datetime.utcnow()
    exp = iat + current_app.config.get('JWT_EXPIRATION_DELTA')
    nbf = iat + current_app.config.get('JWT_NOT_BEFORE_DELTA')
    identity = getattr(identity, 'idOperator') or identity['idOperator']
    return {'exp': exp, 'iat': iat, 'nbf': nbf, 'identity': identity}

用途:

from datetime import datetime
from flask import current_app

這是文檔規范。

您可能要考慮使用flask-jwt-extended。 Flask-JWT已被廢棄多年,而flask-jwt-extended仍在積極維護並且更易於自定義: https : //flask-jwt-extended.readthedocs.io/en/latest/basic_usage.html

請問我可以知道以下代碼的用途嗎

def identity(payload):
    user_id = payload['identity']
    return userid_table.get(user_id, None)

我的代碼拋出以下錯誤 return jsonify({'access_token': access_token.decode('utf-8')}) AttributeError: 'str' object has no attribute 'decode'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM