目前使用grails 2.2.2
我一直在尝试将令牌应用到我的应用程序中并提出了这个问题。我们试图避免重新渲染页面,因为它可能非常慢,所以我们返回JSON。以下是我们使用的基本控制器调用,但我不确定我应该做什么来重置/获取新令牌。
public saveThing(ThingCommand cmd) {
Map model = [:]
withForm {
try {
thingService.saveThing(cmd)
model.success = true
} catch (Exception e) {
model.error = true //any validation errors or anything else
// RESET TOKEN HERE/GET NEW TOKEN?
}
}.invalidToken {
model.invalidToken = true
}
render model as JSON
}
根据我的理解,一旦执行了withForm闭包,就会抛弃令牌。这会导致问题,因为我实际上并没有重新呈现表单,这似乎是生成新令牌的常规方式。我怎么能手动执行此操作,或者有更简单的方法(插件?)
谢谢!
答案 0 :(得分:0)
通过withForm
的表单令牌不适用于AJAX请求。它们被设计用于HTML表单和POST请求,它们重新呈现表单并为表单生成新令牌。
为了使它们能够处理JSON / AJAX请求,您需要在处理请求并拒绝它时实现自己的令牌生成。一个好的起点是查看old tests哪个测试withForm
。这可以让您了解如何创建和存储令牌。