【问题标题】:How to validate data in onCreateUser without losing the form data?如何在不丢失表单数据的情况下验证 onCreateUser 中的数据?
【发布时间】:2014-12-17 19:12:45
【问题描述】:

我正在使用 Meteor 编写应用程序。在这个应用程序中,我想使用 Accounts.onCreateUser 实现用户数据的服务器端验证。传递了一些数据,只能在服务器端进行验证。

在客户端我调用:

Template.register.events({
    'submit form': function (e) {
        e.preventDefault();
        var attributes = {
            username: $("#inputUsername").val(),
            password: $("#inputPassword").val(),
            confirmation: $("inputConfirmation").val(),
            email: $("#inputEmail").val(),
            ...
        };

        Accounts.createUser(attributes, function(err){
            if (err) {
                throwError(err);
            } else {
            }
        });
    }
});

在服务器端:

Accounts.onCreateUser(function(options, user) {
    if(!verifyData(options))
        throw new Meteor.Error(403, "Wrong input");
    return user;
});

服务器端验证失败后,所有表单数据丢失。保存数据的最佳方式是什么?

【问题讨论】:

  • 您实施服务器端验证的原因是什么?如果您没有在客户端上做任何不可能的事情,我强烈建议您只在客户端进行验证。您能否详细说明一下,一旦验证未通过,您想对数据做什么?
  • 一个例子可能是验证码,它必须由服务器验证,或者必须根据数据库检查数据。当验证不通过时,输入字段的值应该仍然存在。
  • throwError 函数内部发生了什么?
  • @Kishin 一切都需要在服务器端进行验证...否则用户可能会打开浏览器控制台并通过方法调用直接向服务器发送错误数据。
  • throwError 仅将错误消息插入 Meteor.Collection

标签: meteor verification accounts


【解决方案1】:

我继续在Meteorpad 上复制了您的代码,据我所知,表单数据仍然存在。您只需要通过客户端中的attributes 变量来访问它。

我可能遗漏了一些东西,但我把你在上面发布的内容放在了那里。

【讨论】:

  • 谢谢。您在 Meteorpad 上的代码显示一切都按预期工作。我在使用 iron:router 时犯了一个错误,导致重新加载。
猜你喜欢
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多