我是新的grails,并尝试创建一个表单,允许用户更改与他/她的帐户相关联的电子邮件地址,我正在创建一个网站.
它要求用户他们当前的密码以及他们想要使用的新电子邮件地址.
如果用户输入错误的密码或无效的电子邮件地址,那么它应该使用适当的错误消息拒绝它们.
现在,电子邮件验证可以通过grails中的限制来完成,但密码更改必须与其当前密码相匹配.我已经将此检查实现为服务类上的方法.
见下面的代码:
def saveEmail = { def client = ClientUser.get(session.clientUserID) client.email = params.email if(clientUserService.checkPassword(session.clientUserID,params.password) ==false) { flash.message = "Incorrect Password" client.discard() redirect(action:'changeEmail') } else if(!client.validate()) { flash.message = "Invalid Email Address" redirect(action:'changeEmail') } else { client.save(); session.clientUserID = null; flash.message = "Your email address has been changed,please login again" redirect(controller: 'clientLogin',action:'index') } }
现在我注意到这是奇怪的是,如果我输入了一封无效的电子邮件,那么它不会保存更改(如预期),但是如果输入错误的密码和有效的电子邮件,那么它将保存更改,甚至将其写回数据库,即使它会给出正确的“无效密码”错误消息.
我在所有if / else if / else块中设置了断点,并发现它是按预期的方式击中第一个if语句,而不是碰到其他的,所以它永远不会调用save()方法,不过还是得救了
经过一番研究,我得到了可以看到在上面代码中使用的discard()方法的文档.所以我补充说,但还是没有用.我甚至尝试使用丢弃,然后从数据库重新加载客户端对象,但仍然没有骰子.
这是非常令人沮丧的,我会感谢任何帮助,因为我认为这肯定不是一个复杂的要求!