这是一个创建于 3498 天前的主题,其中的信息可能已经有所发展或是发生改变。
背景:
- Flask项目使用了Flask-login, 早上意外丢失Flask的
SECRET_KEY
, 所有登录用户因为cookies无法匹配导致访问链接 都变成500错误.
- 然后只能重新生成新的
SECRET_KEY
解决方案:
临时方案:
- 想到是因为登录用户的cookie导致的, 所以强制每一次访问(
before_request
), 用户都做一次logout, 但是cookie是用户本地的, 无法判断什么时候用户进行登录操作. 而且有这一段逻辑, 没有人可以登录. 所以临时可以访问才会选择, 但是治标不治本. 所以才有第二种方案.
永久方案:
- Flask-login在用户登录之后在cookies中写入一个
remember_token
, 主要是要清理掉这个token, 让用户重新登录.
- 这次在每一次访问(
before_request
)的时候, 读取cookies中remember_token
, 还有一个自定义的token, 比如clean_token
, 这个自定义token的作用就是标记是否清除过一次.
- 如果没有这个自定义token, 说明原先的
remember_token
有问题, 就进行logout操作. 此时用户可以访问页面, 不会出现500错误, remember_token
也被清理了.
- 用户再次登录的时候, 在cookies中写入自定义token, 标识已经清理过再次登录. 此时的
remember_token
就是用新的SECRET_KEY
的生成的.
- 解决, 只是会让用户重新登入一次