0 सवाल: TypeError: 'मॉड्यूल' ऑब्जेक्ट कॉल करने योग्य फ्लास्क JWT नहीं है

पर बनाया गया सवाल Wed, May 8, 2019 12:00 AM

मैं एक फ्लास्क सर्वर पर काम कर रहा हूं, जहां हमारे पास लाइब्रेरी का उपयोग करके उपयोगकर्ता के JWT टोकन को मान्य करने का मार्ग है कुप्पी के जेडब्ल्यूटी विस्तारित । यह हमारा मार्ग कैसा दिखता है:

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

किसी कारण से, जब भी मैं इस मार्ग के लिए पोस्ट अनुरोध करने की कोशिश करता हूं, तो मुझे 06003509911001001350350 फ़ंक्शन के लिए TypeError: 'module' object is not callable त्रुटि मिलती है। यहां स्टैक ट्रेस है:

create_access_token

मैंने ट्रिपल-फ्लास्क-जेवीटी-विस्तारित डॉक्स और

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
की जांच की है, वास्तव में, एक फ़ंक्शन और जब create_acess_token प्रिंट करता है तो यह प्रिंट करता है कि यह एक फ़ंक्शन है। मैंने इस विषय पर लगभग सभी StackOverflow पोस्ट को देखा है और उनमें से कोई भी उपयोगी नहीं है - उनमें से अधिकांश उपयोगकर्ता उत्पन्न कक्षाओं के बारे में बात करते हैं, लेकिन यह एक फ़ंक्शन है जिसे मैं बाहरी लाइब्रेरी से खींच रहा हूं।

यहाँ फ्लास्क- jwt-विस्तारित में create_acess_token की परिभाषा है:

create_access_token

यदि यह मदद करता है, तो कोड 3.6.5 में है और यह एक आभासी वातावरण में है। किसी भी मदद की बहुत सराहना की जाएगी!

    
1
  1. हमें पूर्ण त्रुटि ट्रेसबैक संदेश दिखाएं, और हमें 0600350991100101035062 की परिभाषा दिखाएं (संभवतः यह एक आयात है?)
    2019-05-08 16: 18: 52Z
  2. क्या यह त्रुटि प्रत्येक POST कॉल पर या कभी-कभी होती है?
    2019-05-08 16: 20: 57Z
  3. @ जॉनगार्डन हर POST कॉल
    2019-05-08 16: 21: 33Z
  4. @ JohnGordon ने पूर्ण स्टैक ट्रेस, आयात और फ़ंक्शन परिभाषा को शामिल करने के लिए अद्यतन किया है
    2019-05-08 16: 29: 34Z
  5. यदि समस्या बस इतनी थी कि
    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
    
    एक फ़ंक्शन नहीं है, तो त्रुटि ट्रेसबैक आपके दृश्य फ़ंक्शन में समाप्त हो जाएगा। लेकिन यह नहीं है; यह आधा दर्जन से अधिक कॉलों के लिए जा रहा है, इसलिए कुछ और गलत है। ऐसा लग रहा है कि create_access_token में 0600350991100100135062 आइटम के साथ समस्या हो सकती है। क्या आपको उस मॉड्यूल को स्थापित करते समय कुछ कॉन्फ़िगरेशन स्क्रिप्ट को चलाना होगा, या एक कॉन्फ़िगर फ़ाइल को संपादित करना होगा?
    2019-05-08 16: 43: 24Z
    0 उत्तर                              0                         
    create_access_token
स्रोत रखा गया यहाँ