URLSafeTimedSerializer.loads()反序列化报错:max_age参数传值重复
解决TimedSerializer.loads()参数冲突问题
问题原因
你遇到的TimedSerializer.loads() got multiple values for argument 'max_age'错误,根源是参数传递顺序不匹配方法签名。
URLSafeTimedSerializer的loads()方法签名为:
loads(self, s, max_age=None, salt=None, **kwargs)
你在调用时将salt作为第二个位置参数传入,同时又通过关键字参数指定max_age,这就导致max_age被同时赋值了两次:一次是位置参数传入的salt值,一次是你指定的app.config['timer'],从而触发参数冲突错误。
解决方案
将salt改为关键字参数传递,确保参数匹配正确即可:
修改/confirm路由中的反序列化代码:
@app.route('/confirm/<token>', methods=['GET']) def confirm(token): try: print(salt) # 用关键字参数传递salt和max_age,避免参数顺序冲突 user_id = serializer.loads(token, salt=salt, max_age=app.config['timer']) except Exception as e: print('The confirmation link is invalid or has expired.', 'danger') print(e) return redirect('/signup')
额外建议
为了避免后续再出现类似参数顺序问题,建议对dumps()方法也统一使用关键字参数传递salt,让代码更清晰:
# 生成token时也用关键字参数 token = serializer.dumps(userID, salt=salt)
内容的提问来源于stack exchange,提问作者Alfred
相关产品推荐
相关产品推荐

