Meteor中注册的问题

时间:2016-01-12 18:09:11

标签: meteor

我使用普通代码注册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

1 个答案:

答案 0 :(得分:0)

  1. 使用客户端中的Accounts.createUser(options)data.roles变量传入options.profile密钥。
  2. 服务器上,使用Accounts.onCreateUser()
  3. 服务器:

    Accounts.onCreateUser(function(options,user){
      if ( options.profile.length > 0) {
        Roles.addUsersToRoles(user._id, options.profile, 'default-group');
      }
      return user;
    });
    

    docs