如何只提供注册邀请?

Tob*_*old 8 user-accounts meteor

使用Meteor帐户(和accounts-ui)是否有一种简单的方法来仅提出新的用户注册邀请?例如,通过提供邀请链接或邀请代码.

我在Meteor文档中找到的唯一相关内容是Meteor.sendEnrollmentEmail,但它并没有解决我的问题.

nat*_*n-m 17

您可以使用内置程序包执行此操作,但我发现滚动简单实现更简单,更强大.

你需要:

  • 创建一个集合,例如UserInvitations包含邀请以成为用户.
  • 创建用于制作UserInvitations/插入一些的UImeteor mongo
  • 使用iron-router或类似创建路线,例如:

    Router.map ->
      @route 'register',
        path: '/register/:invitationId'
        template: 'userRegistration'
        data: ->
          return {
            invitationId: @params.invitationId
          }
        onBeforeAction: ->
          if Meteor.userId()?
            Router.go('home')
          return
    
    Run Code Online (Sandbox Code Playgroud)
  • userRegistration提交表单时- 调用

    Accounts.createUser({invitationId: Template.instance().data.invitationId /*,.. other fields */})
    
    Run Code Online (Sandbox Code Playgroud)
  • 在服务器上,创建一个Accounts.onCreateUser钩子以将invitationIdfrom选项传递给用户

    Accounts.onCreateUser(function(options, user){
      user.invitationId = options.invitationId
      return user;
    });
    
    Run Code Online (Sandbox Code Playgroud)
  • 此外,在服务器上创建一个Accounts.validateNewUser钩子来检查invitationId并标记使用的邀请

    Accounts.validateNewUser(function(user){
      check(user.invitationId, String);
      // validate invitation
      invitation = UserInvitations.findOne({_id: user.invitationId, used: false});
      if (!invitation){
        throw new Meteor.Error(403, "Please provide a valid invitation");
      }
      // prevent the token being re-used.
      UserInvitations.update({_id: user.invitationId, used: false}, {$set: {used: true}});
    
      return true
    });
    
    Run Code Online (Sandbox Code Playgroud)

现在,只有具有有效未使用的用户invitationId才能注册.

编辑:2014年10月 - 更新为使用meteor 0.9.x API