首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复itsdangerous.BadTimeSignature签名错误

如何修复itsdangerous.BadTimeSignature签名错误
EN

Stack Overflow用户
提问于 2015-05-09 13:21:26
回答 1查看 4.5K关注 0票数 6

我在做一个项目(不是任何公司)。项目,学术)我有困难使用它的危险和登录经理从瓶-登录。

我创建了一个注册表格。输入我的名字、电子邮件和密码,然后当我重新启动服务器时,我得到以下信息:

代码语言:javascript
复制

itsdangerous.BadTimeSignature

BadTimeSignature:签名'GAMjfzQpbKlPraWesdT49W40pA8‘不匹配

代码语言:javascript
复制

错误流如下所示:

代码语言:javascript
复制
return render_template('index.html')
  ctx.app.update_template_context(context)
    context.update(func())
 return dict(current_user=_get_user())
  current_app.login_manager._load_user()
    return self._load_from_cookie(request.cookies[cookie_name])
 user = self.token_callback(cookie)
line 93, in load_token
    data = login_serializer.loads(token, max_age=max_age)
.unsign(s, max_age, return_timestamp=True)
in unsign
    date_signed=timestamp)
BadTimeSignature: Signature 'GAMjfzQpbKlPraWesdT49W40pA8' does not match

问题的根源在运行中的主应用程序文件中:

代码语言:javascript
复制
line 93, in load_token
    data = login_serializer.loads(token, max_age=max_age)

@login_manager.token_loader
def load_token(token):
    max_age = app.config["REMEMBER_COOKIE_DURATION"].total_seconds()

    #decrypt token
    data = login_serializer.loads(token, max_age=max_age)

    user = find-and-get-user-object(data)
    if user:
        if data[2] == users password: return user object
    return None

app.config"REMEMBER_COOKIE_DURATION“设置为

代码语言:javascript
复制
app.config["REMEMBER_COOKIE_DURATION"] = some timedelta days

时间增量是从DateTime导入的。

模型文件在sql炼金术模型中定义了用户模型:

代码语言:javascript
复制
Base=declarative_base()

用类方法

代码语言:javascript
复制
get_auth_token(self):
        return login_serializer.dumps([str(self.id_), self.email, self.pwd])

登录序列化程序基于:

代码语言:javascript
复制
from itsdangerous import URLSafeTimedSerializer
app.secret_key = gen_random_key()
login_serializer = URLSafeTimedSerializer(app.secret_key)

在没有登录管理器的情况下,提交路由正在工作。

我想知道load_token()函数行是怎样的:

代码语言:javascript
复制
    data = login_serializer.loads(token, max_age=max_age)

影响从用户模型生成的令牌,以及为什么要在路由上检查匹配,例如“/”或任意随机访问的任何路由。

是否需要设置权限限制,以使登录管理器不检查每条路径?

正如我所理解的,正在生成替代令牌,以便更安全地将会话cookie绑定到服务器端cookie,因为将比较服务器端cookie信息,这是基于get_auth_token可以看到的信息,它接受一些用户属性,并为令牌提供一个随机的安全字符串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-09 14:06:49

您每次在这里创建一个新的秘密:

代码语言:javascript
复制
from itsdangerous import URLSafeTimedSerializer
app.secret_key = gen_random_key()
login_serializer = URLSafeTimedSerializer(app.secret_key)

别干那事。为您的应用程序创建one秘密,并始终使用它。您的密钥使用此服务器端机密签名,然后当cookie从浏览器发送回时,再次用于验证内容未被更改。

如果每次更改该秘密,则以前生成的cookie将始终无效,因为它们将与新的秘密不匹配。

在应用程序配置中存储这个秘密。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30140437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档