gpt4 book ai didi

java - 关于实现服务器端和客户端验证的问题

转载 作者:行者123 更新时间:2023-12-01 13:55:53 25 4
gpt4 key购买 nike

我正在与 PlayFramework 合作构建一个通过 Ajax 工作的注册用户表单(它从不刷新页面),我显然需要验证它。我正在考虑两种方法来实现客户端和服务器端验证。

  1. 通过 Ajax 将表单数据发送到服务器端验证,从而保存如果数据有效,则向数据库中的用户发送一条错误消息前端以防数据无效。所有这一切都是通过 ajax 发生的无需刷新页面。Pro:这样我就不会实现任何客户端验证,但我得到了相同的效果。Contro:我无法显示具体内容每种类型的无效数据的错误消息(必需、最小长度、电子邮件格式,...)
  2. 使用客户端验证来验证表单(jQuery Validation插件),如果有效,则将数据发送到服务器端验证。从服务器端,如果它有效,它会注册用户,否则什么也不会发生(?)。 专业版:非常简单的展示方式具体错误消息Contro:我需要实现2次相同的验证逻辑

这些是我的考虑,但不知道是否正确,或者是否还有其他更好的方法。您认为做到这一点的最佳方法是什么?

问题:

使用第一种方法:是否可以使用 PlayFramework 从服务器验证发送特定的错误消息并在前端显示它们(无需从头开始编写所有验证规则)?

使用第二种方式:要实现服务器和端验证,我必须首先使用客户端验证来验证数据,然后传递到服务器?在浏览器上禁用 javascript:服务器端验证必须显示一些内容? (例如:值得注意的 Mediafire 没有这样做,我必须假设这是正确的)

编辑:这里是我用来通过 ajax 以 json 格式接收表单数据的代码:

Controller :

    JsonNode json = request().body().asJson();      
Form<User> userForm = User.form.bind(json);

if(userForm.hasErrors()) {
return badRequest("One or more inputs are invalid");
} else {
// register the user in the db
}

型号(用户):

    @Required
public String email;

@Required @MinLength(8) @MaxLength(16)
public String password;

public static Form<User> form = Form.form(User.class);

事实上,它会针对任何无效输入返回一条通用消息。我无法做的是:返回(使用 badRequest)特定错误消息并在表单的每个输入下显示它们

最佳答案

您不需要告诉某人他尝试使用太短的用户名登录,在这种特殊情况下,如果您只显示类似以下的错误:登录不正确就足够了。通常建议不要告诉用户登录失败的确切原因是什么 - 它可以(稍微)防止暴力登录尝试。

如何处理错误取决于您,您可以轻松返回包含所有错误列表的 JSON 对象,以便可以在您想要的位置显示它们。

对于其他形式(如某些注册、消息传递等),使用现成的前端 validator 是一个很好的方法,因为您可以避免一些冗余请求,而且它的工作更顺畅,无论如何,主要验证应该始终在后端完成 -只需使用前端一作为“您网站的有趣补充”。

并且不用担心 JS 被禁用 - 在这种情况下,您甚至无法执行简单的 AJAX 请求;)

编辑

如上所述,您可以只返回一个 JSON 对象(也包含错误列表)并使用 JavaScript 处理它,尽管可能有许多不同的方法,但有一种可能性:

public static Result submit() {
Form<User> userForm = Form.form(User.class).bindFromRequest();
ObjectNode output = Json.newObject();

if (userForm.hasErrors()) {
output.put("status", 400);
output.put("errors", userForm.errorsAsJson());
return badRequest(output);
}

output.put("status", 200);
output.put("msg", "Your account was registered correctly!");
return ok(output);

}

关于java - 关于实现服务器端和客户端验证的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19630595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com