Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Json jwt令牌问题-TypeError:类型为';用户';JSON不可序列化_Python_Json_Flask_Jwt_Access Token - Fatal编程技术网

Python Json jwt令牌问题-TypeError:类型为';用户';JSON不可序列化

Python Json jwt令牌问题-TypeError:类型为';用户';JSON不可序列化,python,json,flask,jwt,access-token,Python,Json,Flask,Jwt,Access Token,我正在尝试将令牌附加到登录的用户: user_info = request.get_json() entered_username = User.query.filter_by(username = user_info['username']).first() if user_info['password'] == entered_username.password:

我正在尝试将令牌附加到登录的用户:

user_info = request.get_json()
entered_username = User.query.filter_by(username = user_info['username']).first()
        if user_info['password'] == entered_username.password:                                                                  
            token = jwt.encode({'username':entered_username, 'exp':datetime.datetime.utcnow() + datetime.timedelta(minutes=30)},
                               secret_key, algorithm='HS256').decode('UTF-8')
        return jsonify(token) 
但是我得到:
TypeError:User类型的对象不可JSON序列化。
我还尝试了
返回jsonify(token.decode('UTF-8'))


我缺少什么?

您不能将
用户
对象编码为JSON,并且
输入的用户名
用户
对象。如果您只想在令牌中输入用户名,可以执行以下操作:

user_info = request.get_json()
user_obj = User.query.filter_by(username = user_info['username']).first()
if user_info['password'] == user_obj.password:
    claims = {
        'username': user_info['username'], # or perhaps user_obj.username
        'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
    }

    token = jwt.encode(claims, secret_key, algorithm='HS256')

    # Maybe some error checking here?

    response = {
        'token': token.decode()
    }

    return jsonify(response)

您不能将
用户
对象编码为JSON,并且
输入的用户名
用户
对象。如果您只想在令牌中输入用户名,可以执行以下操作:

user_info = request.get_json()
user_obj = User.query.filter_by(username = user_info['username']).first()
if user_info['password'] == user_obj.password:
    claims = {
        'username': user_info['username'], # or perhaps user_obj.username
        'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
    }

    token = jwt.encode(claims, secret_key, algorithm='HS256')

    # Maybe some error checking here?

    response = {
        'token': token.decode()
    }

    return jsonify(response)

正如上面所说:您不能将
User
对象编码为JSON,而
entered\u username
User
对象。如果您只想在您的令牌中输入用户名,请将其编码为
{'username':user_info['username'],…}
。您的意思是全部吗?我尝试了
{'username':user_info['username'],…}.decode('UTF-8'),但后来我得到了AttributeError:'dict'对象没有属性'decode'
是的,省略号表示代码的其余部分,而不是字面上的
。我也不知道你为什么要在这里调用
decode
。不,我是说{}的其余部分或整个代码的其余部分。不哈哈。我对encode也有同样的理解。正如上面所说的:你不能将
用户
对象编码为JSON,而
输入的用户名
用户
对象。如果您只想在您的令牌中输入用户名,请将其编码为
{'username':user_info['username'],…}
。您的意思是全部吗?我尝试了
{'username':user_info['username'],…}.decode('UTF-8'),但后来我得到了AttributeError:'dict'对象没有属性'decode'
是的,省略号表示代码的其余部分,而不是字面上的
。我也不知道你为什么要在这里调用
decode
。不,我是说{}的其余部分或整个代码的其余部分。不哈哈。我对编码也有同样的要求。