我正在我的烧瓶应用程序中使用itsdangerous
TimedJSONWebSignatureSerializer
实施密码重置,在发送电子邮件地址时,我在make-header exp = iat + self.expires_in
中得到了以下堆栈跟踪,最后是{{ 1}}。我做错了什么?
我尝试将id更改为整数,但未成功。对解码进行了研究,但这似乎还不错。
TypeError: unsupported operand type(s) for +: 'int' and 'str'
我希望将重置链接无缝发送到给定的电子邮件地址。
答案 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
。如果这样做,请使用整数值