刚刚升级到 2.2.1,我对 CSRF 处理的情况有点困惑。使用默认配置时,我总是会收到“缺少 CSRF 令牌”错误,即使会话数据中显然有一个 csrfToken。
经过更多的探索,我发现我可以通过csrf.sign.tokens
在设置中设置为 false 来防止这种情况(默认为 true)。出于某种原因,这些行:
token.flatMap(Crypto.extractSignedToken)
.map(token => Token(Crypto.signToken(token)))
inCSRF.getToken
给了我一个 None 令牌。有谁知道只有在启用令牌签名时才会导致 CSRF 失败。我没有(故意)更改任何与 CSRF 相关的配置默认值。我的怀疑是令牌格式错误并且Crypto.extractSignedToken
失败了,但我不知道为什么会这样。
我的应用程序的 CSRF 保护是使用全局WithFilters(CSRFFilter())
方法完成的。