Grails withForm,出错时重置令牌?
Grails withForm, reset token on error?
目前正在使用 grails 2.2.2
我一直在尝试在我的应用程序中实施令牌,但遇到了这个问题。我们尽量避免重新呈现页面,因为它可能非常慢,所以我们 return JSON 代替。以下是我们使用的基本控制器调用,但我不确定我应该如何处理 reset/get 新令牌。
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 闭包,令牌就会被丢弃。这会导致一个问题,因为我实际上并没有重新呈现似乎是生成新令牌的正常方式的表单。我如何手动执行此操作或是否有更简单的方法(插件?)
谢谢!
通过 withForm
的表单令牌不适用于 AJAX 请求。它们设计用于 HTML 表单和 POST 重新呈现表单并为表单生成新令牌的请求。
为了使它们能够处理 JSON/AJAX 请求,您需要在处理请求和拒绝请求时实现自己的令牌生成。一个好的起点是查看测试 withForm
的 old tests。这应该让您了解如何创建和存储令牌。
目前正在使用 grails 2.2.2
我一直在尝试在我的应用程序中实施令牌,但遇到了这个问题。我们尽量避免重新呈现页面,因为它可能非常慢,所以我们 return JSON 代替。以下是我们使用的基本控制器调用,但我不确定我应该如何处理 reset/get 新令牌。
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 闭包,令牌就会被丢弃。这会导致一个问题,因为我实际上并没有重新呈现似乎是生成新令牌的正常方式的表单。我如何手动执行此操作或是否有更简单的方法(插件?)
谢谢!
通过 withForm
的表单令牌不适用于 AJAX 请求。它们设计用于 HTML 表单和 POST 重新呈现表单并为表单生成新令牌的请求。
为了使它们能够处理 JSON/AJAX 请求,您需要在处理请求和拒绝请求时实现自己的令牌生成。一个好的起点是查看测试 withForm
的 old tests。这应该让您了解如何创建和存储令牌。