【问题标题】:AttributeError: 'str' object has no attribute 'decode' python errorAttributeError: 'str' 对象没有属性 'decode' python 错误
【发布时间】:2021-01-19 19:32:46
【问题描述】:

这是我的代码

@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"}))

这是错误

AttributeError: 'str' 对象没有属性 'decode'

【问题讨论】:

  • 你的问题是?你只能编码一个字符串。
  • jwt是什么对象?
  • 字符串将被编码,字节将被解码。

标签: python


【解决方案1】:

如果您使用PyJwt 模块,则无需解码令牌。 jwt.encode({some_dict}) 返回你需要的令牌。

【讨论】:

    【解决方案2】:

    这对我有用,我只返回了令牌(我最初有 'return token.decode('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
    

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 1970-01-01
      • 2014-05-26
      • 2015-04-19
      • 2021-07-05
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多