使用TimedJSONWebSignatureSerializer重置令牌

时间:2019-05-03 13:34:02

标签: python flask

我正在我的烧瓶应用程序中使用itsdangerous TimedJSONWebSignatureSerializer实施密码重置,在发送电子邮件地址时,我在make-header exp = iat + self.expires_in中得到了以下堆栈跟踪,最后是{{ 1}}。我做错了什么?

我尝试将id更改为整数,但未成功。对解码进行了研究,但这似乎还不错。

这是我的代码:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

我希望将重置链接无缝发送到给定的电子邮件地址。

1 个答案:

答案 0 :(得分:1)

调用expires_sec时,需要确保get_reset_token是整数,并且您要覆盖expires_sec参数。

这是因为当传递给Serializer实例的expires_in值是一个字符串时,它将引发异常,如下所示。

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
s = Serializer('your_secret_key', expires_in="36000") # when expires_in value is a string it raises the TypeError exception.
s.dumps({'id': 'your_user_id'}).decode('ascii')

它会引发您在上面突出显示的异常

TypeError                                 Traceback (most recent call last)
<ipython-input-10-1f720d87ecbf> in <module>
----> 1 s.dumps({'id': '232232'}).decode('ascii')

   178         header = JSONWebSignatureSerializer.make_header(self, header_fields)
    179         iat = self.now()
--> 180         exp = iat + self.expires_in
    181         header["iat"] = iat
    182         header["exp"] = exp

TypeError: unsupported operand type(s) for +: 'int' and 'str'

解决方案:检查您在哪里呼叫get_reset_token,并确保您没有用字符串值覆盖expires_sec。如果这样做,请使用整数值