0 Câu hỏi: LoạiError: đối tượng 'mô-đun' không thể gọi được Flask JWT

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đang làm việc trên máy chủ Flask nơi chúng tôi có lộ trình xác thực mã thông báo JWT của người dùng bằng thư viện jar-jwt-Extended . Đây là những gì tuyến đường của chúng tôi trông giống như:

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

Vì một số lý do, bất cứ khi nào tôi cố gắng thực hiện một yêu cầu bài đăng trên tuyến đường này, tôi gặp lỗi TypeError: 'module' object is not callable cho chức năng create_access_token. Đây là dấu vết ngăn xếp:

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

Tôi đã kiểm tra ba lần các tài liệu mở rộng bình-jwt và create_acess_token trên thực tế là một chức năng và khi in create_acess_token nó sẽ in rằng đó là một chức năng. Tôi đã xem qua hầu hết tất cả các bài đăng StackOverflow về chủ đề này và không ai trong số chúng hữu ích, hầu hết trong số họ nói về các lớp do người dùng tạo, nhưng đây là một chức năng mà tôi lấy từ thư viện bên ngoài.

Đây là định nghĩa của create_access_token trong bình-jwt-Extended:

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

Nếu nó giúp, mã nằm trong Python 3.6.5 và nó ở trong môi trường ảo. Bất kỳ trợ giúp sẽ được đánh giá rất cao!

    
1
  1. Hiển thị cho chúng tôi thông báo truy nguyên lỗi đầy đủ và hiển thị cho chúng tôi định nghĩa của create_access_token (có lẽ đó là nhập khẩu?)
    2019-05-08 16: 18: 52Z
  2. Lỗi này có xảy ra trên mỗi cuộc gọi POST hay đôi khi không?
    2019-05-08 16: 20: 57Z
  3. @ JohnGordon mỗi cuộc gọi POST
    2019-05-08 16: 21: 33Z
  4. @ JohnGordon được cập nhật để bao gồm theo dõi ngăn xếp đầy đủ, nhập và định nghĩa hàm
    2019-05-08 16: 29: 34Z
  5. Nếu sự cố chỉ đơn giản là create_access_token không phải là một chức năng, lỗi truy nguyên sẽ kết thúc trong chức năng xem của bạn. Nhưng nó không; nó tiếp tục thực hiện thêm nửa tá cuộc gọi nữa, vì vậy có gì đó không ổn. Có vẻ như sự cố có thể xảy ra với mục config.json_encoder trong _create_access_token. Bạn có phải chạy một số tập lệnh cấu hình hoặc chỉnh sửa tệp cấu hình khi bạn cài đặt mô-đun đó không?
    2019-05-08 16: 43: 24Z
0 Câu trả lời                              0                         
nguồn đặt đây