我使用普通代码注册Meteor,特别是在客户端。 正常代码有效,这意味着无论何时用户创建它都会将用户与会话一起重定向到个人资料页面
有效的代码
Template.signup.events({
'submit form': function(event) {
event.preventDefault();
var email = event.target.email.value;
var username = event.target.username.value;
var password = event.target.password.value;
Accounts.createUser({
email: email,
username: username,
password: username;
});
Router.go('/profile');
}
});
上面的代码工作得很好,它重定向并显示用户的数据,但我读了发现流星书,它说更好的把逻辑放在服务器端,因为我计划添加角色{{3 }}
这是新代码
的客户机/ signup.js
Template.signup.events({
'submit form': function(event) {
event.preventDefault();
var signupData = {
email: event.target.email.value,
username: event.target.username.value,
password: event.target.password.value,
roles: ['customer']
}
Meteor.call('signup', signupData, function(error, result) {
if (error) return alert(error.reason);
// End
if (result) {
Router.go('/profile');
}
});
}
});
服务器/集合/ user.js的
Meteor.methods({
signup: function(data) {
id = Accounts.createUser({
email: data.email,
password: data.password,
username: data.username,
});
if (data.roles.length > 0) {
// Need _id of existing user record so this call must come
// after `Accounts.createUser` or `Accounts.onCreate`
Roles.addUsersToRoles(id, data.roles, 'default-group');
}
return data;
}
});
下面的模板是Router.go将去的地方。
的客户机/模板/账户/ profile.html
<template name="profile">
{{#if currentUser}}
<h3>Hello: {{ user.username }}</h3>
<h4>Email: {{ user.email }}</h4>
{{/if}}
</template>
的客户机/模板/账户/ profile.js
Template.profile.helpers({
user: function() {
return {
email: Meteor.user().emails[0].address,
username: Meteor.user().username
}
}
});
以某种方式上面的代码没有返回任何错误,但现在的问题是它没有在配置文件html上显示用户的对象,但它确实将用户的数据保存到mongodb数据库?
所以只想澄清一下(我的逻辑):
First I click signup -> will do Meteor.call -> then return, if there is no error --> Router.go
答案 0 :(得分:0)
Accounts.createUser(options)
将data.roles
变量传入options.profile
密钥。Accounts.onCreateUser()
:服务器:
Accounts.onCreateUser(function(options,user){
if ( options.profile.length > 0) {
Roles.addUsersToRoles(user._id, options.profile, 'default-group');
}
return user;
});