Grails withForm,错误时重置令牌?

时间:2015-10-27 13:53:05

标签: forms authentication grails submit grails-2.0

目前使用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闭包,就会抛弃令牌。这会导致问题,因为我实际上并没有重新呈现表单,这似乎是生成新令牌的常规方式。我怎么能手动执行此操作,或者有更简单的方法(插件?)

谢谢!

1 个答案:

答案 0 :(得分:0)

通过withForm的表单令牌不适用于AJAX请求。它们被设计用于HTML表单和POST请求,它们重新呈现表单并为表单生成新令牌。

为了使它们能够处理JSON / AJAX请求,您需要在处理请求并拒绝它时实现自己的令牌生成。一个好的起点是查看old tests哪个测试withForm。这可以让您了解如何创建和存储令牌。