0 Question: TypeError: l'objet 'module' n'est pas appelable Flask JWT

question créée à Wed, May 8, 2019 12:00 AM

Je travaille sur un serveur Flask dans lequel nous avons un itinéraire pour valider le jeton JWT d'un utilisateur à l'aide de la bibliothèque flask-jwt-extended . Voici à quoi ressemble notre itinéraire:

from flask_jwt_extended import (
    JWTManager, jwt_required, create_access_token, create_refresh_token, get_jwt_identity, jwt_refresh_token_required
)

@app.route('/api/users/validate', methods=['POST'])
def validate_user():

    if not request.json:
        abort(400)

    data = request.get_json()

    if ('id_token' not in data):
        abort(400, "id_token must be a parameter in the JSON")

    decoded_token = auth.verify_id_token(data['id_token'])

    if ('uid' not in decoded_token):
        return json.dumps({'verified': False}), 200
    else:
        user = mongo.db.users.find_one({'_id': decoded_token['uid']})

        if user:
            access_token = create_access_token(identity=user['_id'])
            refresh_token = create_refresh_token(identity=user['_id'])
            return json.dumps({'verified': True, 'access_token': access_token, 'refresh_token': refresh_token}), 200
        else:
            return json.dumps({'verified': False, 'message': 'unable to locate user'}), 401

Pour une raison quelconque, chaque fois que j'essaie de créer une demande de publication sur cette route, une erreur TypeError: 'module' object is not callable s'affiche pour la fonction 0600350991111101035062. Voici le suivi de la pile:

create_access_token

J'ai vérifié trois fois les documents flask-jwt-extended et

127.0.0.1 - - [08/May/2019 12:24:17] "POST /api/users/validate HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/user/Documents/server/src/controllers/auth_controller.py", line 44, in validate_user
    access_token = create_access_token(identity=user['_id')
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask_jwt_extended/utils.py", line 157, in create_access_token
    return jwt_manager._create_access_token(identity, fresh, expires_delta, user_claims)
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask_jwt_extended/jwt_manager.py", line 476, in _create_access_token
    json_encoder=config.json_encoder
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask_jwt_extended/tokens.py", line 77, in encode_access_token
    json_encoder=json_encoder)
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/flask_jwt_extended/tokens.py", line 31, in _encode_jwt
    json_encoder=json_encoder).decode('utf-8')
  File "/Users/user/Documents/server/venv/lib/python3.6/site-packages/jwt/api_jwt.py", line 61, in encode
    cls=json_encoder
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
TypeError: 'module' object is not callable
est en fait une fonction et lors de l'impression create_acess_token, il imprime qu'il s'agit d'une fonction. J'ai parcouru presque tous les articles de StackOverflow sur ce sujet et aucun d'entre eux n'est utile. La plupart d'entre eux parlent de classes générées par l'utilisateur, mais c'est une fonction que je tire d'une bibliothèque externe.

Voici la définition de create_acess_token dans flask-jwt-extended:

create_access_token

Si cela peut aider, le code est dans Python 3.6.5 et dans un environnement virtuel. Toute aide serait grandement appréciée!

    
1
  1. Montrez-nous le message de trace d'erreur complet et montrez-nous la définition de
    def _create_access_token(self, identity, fresh=False, expires_delta=None, user_claims=None):
        if expires_delta is None:
            expires_delta = config.access_expires
    
        if user_claims is None:
            user_claims = self._user_claims_callback(identity)
    
            access_token = encode_access_token(
                identity=self._user_identity_callback(identity),
                secret=self._encode_key_callback(identity),
                algorithm=config.algorithm,
                expires_delta=expires_delta,
                fresh=fresh,
                user_claims=user_claims,
                csrf=config.csrf_protect,
                identity_claim_key=config.identity_claim_key,
                user_claims_key=config.user_claims_key,
                json_encoder=config.json_encoder
            )
            return access_token
    
    (probablement une importation?)
    2019-05-08 16: 18: 52Z
  2. Cette erreur survient-elle à chaque appel POST ou seulement de temps en temps?
    2019-05-08 16: 20: 57Z
  3. @ JohnGordon à chaque appel POST
    2019-05-08 16: 21: 33Z
  4. @ JohnGordon mis à jour pour inclure la trace complète de la pile, l'importation et la définition de la fonction
    2019-05-08 16: 29: 34Z
  5. Si le problème était simplement que 0600350991111101035062 n'était pas une fonction, le traçage d'erreur se terminerait par votre fonction d'affichage. Mais ce n'est pas le cas. il continue à recevoir une demi-douzaine d'appels de plus, alors il y a autre chose qui ne va pas. Il semble que le problème puisse provenir de l'article 060035099111110103506 0600350991111101035062. Avez-vous dû exécuter un script de configuration ou éditer un fichier de configuration lorsque vous avez installé ce module?
    2019-05-08 16: 43: 24Z
0 réponses                              0                         
create_access_token
source placée ici