Javascript 我可以为SilverStripe admin中的Graphql突变重新生成CSRF令牌吗?

Javascript 我可以为SilverStripe admin中的Graphql突变重新生成CSRF令牌吗?,javascript,graphql,silverstripe,silverstripe-4,Javascript,Graphql,Silverstripe,Silverstripe 4,我在SilverStripe pages管理区从react发送了一个变异,但是用户看到一个CSRF错误,消息是“无效的CSRF令牌”。但是,它们仍然显示为已登录(如果未登录,则我会在错误中获得“需要验证”) 有没有办法从Javascript重新获取/重新生成CSRF令牌?例如,登录用户可以用来获取新令牌的端点 我查看了错误产生的CSRFMiddleware.php,并在core中对CSRF进行了一般性搜索,但我看不到允许我这样做的相关端点 更新:我可以通过加载一个管理页面,然后删除会话cooki

我在SilverStripe pages管理区从react发送了一个变异,但是用户看到一个CSRF错误,消息是
“无效的CSRF令牌”
。但是,它们仍然显示为已登录(如果未登录,则我会在错误中获得
“需要验证”

有没有办法从Javascript重新获取/重新生成CSRF令牌?例如,登录用户可以用来获取新令牌的端点

我查看了错误产生的
CSRFMiddleware.php
,并在core中对CSRF进行了一般性搜索,但我看不到允许我这样做的相关端点


更新:我可以通过加载一个管理页面,然后删除会话cookie,并在一个单独的选项卡上重新登录来可靠地复制它。因此JS内存中的CSRF无效

有趣的问题。我认为GraphQL模块提供一个开箱即用的
securityID
查询肯定是有道理的,因为默认情况下我们已经提供了CSRF保护。问题是如何防止该令牌在应用程序中过时。对于表单,这很容易,因为令牌是在加载时呈现的,但是在SPA的上下文中,您只会得到一次加载,并向JS内存中注入一次。只是大声想一想,它必须是某种轮询事件,但删除会话不一定会触发刷新。我在想,您可以在到期时执行此操作-因此在出现无效错误的情况下,获取一个新令牌,然后重试变异?我以为可以在
config
下从redux存储中检索SecurityID,这不是你要问的吗?不过它仍在内存中。如果会话中断,则无法从外部获取新会话或刷新浏览器。CMS通常每X分钟发出一次“ping”请求以保持会话正常。如果删除了sesson cookie,基本上就是“注销”,那么SilverStripe如何知道您是以用户身份登录的呢?这是一个有趣的问题。我认为GraphQL模块提供一个开箱即用的
securityID
查询肯定是有道理的,因为默认情况下我们已经提供了CSRF保护。问题是如何防止该令牌在应用程序中过时。对于表单,这很容易,因为令牌是在加载时呈现的,但是在SPA的上下文中,您只会得到一次加载,并向JS内存中注入一次。只是大声想一想,它必须是某种轮询事件,但删除会话不一定会触发刷新。我在想,您可以在到期时执行此操作-因此在出现无效错误的情况下,获取一个新令牌,然后重试变异?我以为可以在
config
下从redux存储中检索SecurityID,这不是你要问的吗?不过它仍在内存中。如果会话中断,则无法从外部获取新会话或刷新浏览器。CMS通常每X分钟发出一次“ping”请求以保持会话正常。如果删除了sesson cookie,基本上就是“注销”,那么SilverStripe怎么知道您是以用户身份登录的呢?