gpt4 book ai didi

validation - Meteor - 客户端和服务器中的 Account.createUser

转载 作者:行者123 更新时间:2023-12-01 07:04:37 24 4
gpt4 key购买 nike

我理解在客户端和服务器中都有业务逻辑的原因,但我不太明白在某些情况下如何做到这一点。例如:

// client/client.js
// hnadling click event on the Create Accounts button
Template.homecontent.events({
'click #btnCreateAccount': function (event, template) {
var userEmail = template.find('#email').value,
userName = template.find('#newusername').value,
password = template.find('#newpassword').value,
password2 = template.find('#password2').value,
name = template.find('#fullname').value;

validates = true;
//do some validation here
if(password != password2) {
validates = false;
}

if(validates === true) {
Accounts.createUser({
username: userName,
email: userEmail,
password: password,
profile: {
name: name
}
}, function (error) {
if (error) {
console.log("Cannot create user");
}
});
}
}
});

由于验证仅在客户端进行,因此很容易绕过。
但是这里有一个问题:这是由用户事件触发的,所以我不确定在客户端和服务器上运行此代码的最佳方法是什么。

最佳答案

您可能正在寻找类似 Meteor.methods(); 的内容,它允许您在服务器上定义客户端可以使用 Meteor.call() 调用的函数.您可以在服务器上提供验证功能和用户保存功能,并从客户端调用它们,传入表单数据。

我过去所做的是(在客户端上)我有一个 userFormParse()函数接受表单对象并将其解析为可以传递到服务器端验证函数的对象。我对用户编辑和创建表单使用相同的 userFormParse 函数。

验证函数向客户端返回一个错误对象,或者,如果都是有效数据,我会将数据对象传递给 userCreateWithRole功能(我通常总是将角色分配给用户)。

在服务器上:

Meteor.methods({
'createUserWithRole': function(data, role) {
var userId;

Meteor.call('createUserNoRole', data, function(err, result) {
if (err) {
return err;
}
Roles.addUsersToRoles(result, role);
return userId = result;
});
return userId;
},
'createUserNoRole': function(data) {
//Do server side validation
return Accounts.createUser({
email: data.email,
password: data.password,
profile: data.profile
});
}
});

然后在客户端:

Template.userSignup.events({
'submit #userSignup': function(event) {
var data, validationErrors;
event.preventDefault();
data = userInputParse($(event.target)); //this function parses form into user object that can be inserted
validationErrors = userObjectValidate(data); //this function takes and does client side validation on the user object.
data.profile.status = 0;
if (validationErrors) {
//Show the user the validation errors
} else {
return Meteor.call('createUserWithRole', data, 'standard', function(err, userId) {
if (!err) {
//User created!!
} else {
//Insertion Error
}
});
}
}
});

该代码是概念性的且未经测试:)

关于validation - Meteor - 客户端和服务器中的 Account.createUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202829/

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