Ошибка атрибута: объект ‘str’ не имеет атрибута ‘decode’ ошибка python

#python

#python

Вопрос:

это мой код

 @app.route("/api/v1.0/login", methods=["GET"] )
def login():
    auth = request.authorization
    if auth:
        user = users.find_one( { "username" : auth.username } )
        if user is not None:
            if bcrypt.checkpw(bytes(auth.password, 'UTF-8'), user["password"]):
                token = jwt.encode({
                    'user' : auth.username,
                    'exp' : datetime.datetime.utcnow()   datetime.timedelta(minutes=30)}, app.config['SECRET_KEY'])
                return make_response( jsonify({'token' : token.decode('UTF-8')}), 200)
            else: 
                return make_response(jsonify({"message" : "Bad password"} ) )
        else: 
            return make_response(jsonify({"message" : "Bad username" } ) )

    return make_response(jsonify({ "message" : "Authentication required"}))
 

и это ошибка

Ошибка атрибута: объект ‘str’ не имеет атрибута ‘decode’

Комментарии:

1. И ваш вопрос? Вы можете кодировать только строку.

2. Что это за объект jwt?

3. Строки будут закодированы, а байты будут декодированы.

Ответ №1:

Если вы используете модуль PyJWT, тогда нет необходимости декодировать токен. jwt.encode({some_dict}) возвращает нужный вам токен.

Ответ №2:

это сработало для меня, я только вернул токен (у меня изначально был ‘return token.декодировать (‘utf-8′)’ но позже отключил функцию декодирования)

    def _generate_jwt_token(self):
        dt = datetime.now()   timedelta(days=60)
        token = jwt.encode({
            'id': self.pk,
            'exp': dt.utcfromtimestamp(dt.timestamp())},
            settings.SECRET_KEY, algorithm='HS256')
        return token