gpt4 book ai didi

javascript - Meteor 的 createUser 在客户端和服务器上运行

转载 作者:行者123 更新时间:2023-11-27 23:42:35 26 4
gpt4 key购买 nike

我对 Meteor 相当陌生,并试图掌握它的概念。我下面有一个客户端代码,它触发 Meteor 方法来创建新用户:

Template["signup-team"].onRendered(function(){
var validator = $('.signup-team-form').validate({
submitHandler: function(event){
var email = $('[name=email]').val();
var password = $('[name=password]').val();
Meteor.call('addNewUser', email, password, "team-captain", function(error, result) {
if (error){
return alert(error.reason);
}
Router.go("complete-signup");
});
}
});
});

该方法被定义为在客户端和服务器上运行。当在服务器上运行时,我希望它创建用户并向帐户添加 Angular 色。在客户端,我想让用户登录。

Meteor.methods({
addNewUser: function(email, password, role) {
check(email, String);
check(password, String);

if(Meteor.isClient){
Accounts.createUser({
email: email,
password: password,
profile: {
completed: false
}
}, function(error){
if(error){
console.log(error); // Output error if registration fails
} else {
console.log(Meteor.userId());
}
});
} else {
var id = Accounts.createUser({
email: email,
password: password,
profile: {
completed: false
}
});
console.log(id);
Roles.addUsersToRoles(id, role);
}
}
});

服务器部分运行良好,并且创建了新用户,但在客户端出现错误错误:调用 createUser 没有结果并且用户未自动登录。

我认为问题是我不需要在客户端上运行createUser并使用Meteor.loginWithPassword,但我真的很想知道这背后的理论。谢谢

最佳答案

不要这样做。您正在重写核心代码并不必要地产生安全问题。

无需使用 addNewUser 方法,只需调用 Accounts.createUser在客户端上。有一个onCreateUser添加 Angular 色的回调句柄。

在您的代码中,您将以明文形式将用户密码发送到服务器。当您调用Accounts.createUser时,password is hashed在发送到服务器之前。它还负责为您登录新用户。

添加 Angular 色时遇到的一个问题是,您将无法在 onCreateUser 回调中使用 Roles.addUsersToRoles(id, role),因为用户对象具有尚未添加到数据库,并且没有 _id。但是,您可以直接将 Angular 色添加到建议的用户对象,如下所示:

Accounts.onCreateUser(function(options, user) {
user.roles = ['team-captain']
return user;
})

话又说回来,也许您不希望所有用户都是队长!

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

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