自定义Meteor注册模板

San*_*sen 4 meteor iron-router meteor-accounts

在我的应用程序中,我想为用户播种数据库并向他们发送注册链接以激活他们的帐户(并选择密码).我还希望他们验证/更改一些配置文件数据.

在服务器上我按如下方式为数据库播种:

Meteor.startup(function () {
  if(Meteor.users.find().count() === 0) {
    var user_id = Accounts.createUser({ email: 'some@email.com', profile: { some: 'profile' } });
    Accounts.sendEnrollmentEmail(user_id);
  }
})
Run Code Online (Sandbox Code Playgroud)

注册链接按预期发送,但我想为单击电子邮件中的URL时创建自定义模板.最好由铁路由器处理.(不使用accounts-ui包).

我尝试过将用户重定向到这样的自定义路线:

var doneCallback, token;

Accounts.onEnrollmentLink(function (token, done) {
  doneCallback = done;
  token = token;
  Router.go('MemberEnroll')
});
Run Code Online (Sandbox Code Playgroud)

哪个不起作用(它改变了网址但没有渲染我的模板)

我还尝试更改服务器上的注册URL,如下所示:

Accounts.urls.enrollAccount = function (token) {
  return Meteor.absoluteUrl('members/enroll/' + token);
};
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,Accounts.onEnrollmentLink回调不会触发.此外,更改URL没有记录,所以我不确定它是一个好的做法.

任何帮助表示赞赏.

Sas*_*nth 13

在我的应用程序中,我这样做

        this.route('enroll', {
            path: '/enroll-account/:token',
            template: 'enroll_page',
            onBeforeAction: function() {
                Meteor.logout();
                Session.set('_resetPasswordToken', this.params.token);
                this.subscribe('enrolledUser', this.params.token).wait();
            },
            data: function() {
                if(this.ready()){
                    return {
                        enrolledUser: Meteor.users.findOne()
                    }
                }
            }
       })
Run Code Online (Sandbox Code Playgroud)

注册网址是这样的

http://www.yoursite.com/enroll-account/hkhk32434kh42hjkhk43
Run Code Online (Sandbox Code Playgroud)

当用户点击链接时,他们将重定向到此模板,您可以渲染模板

在我的出版物中

Meteor.publish('enrolledUser', function(token) {
    return Meteor.users.find({"services.password.reset.token": token});
});
Run Code Online (Sandbox Code Playgroud)

从用户那里获取密码后

Accounts.resetPassword(token, creds.password,function(e,r){
  if(e){
    alert("Sorry we could not reset your password. Please try again.");
  }else{
    alert("Logged In");
    Router.go('/');
   }
 })
Run Code Online (Sandbox Code Playgroud)

注册链接

Accounts.urls.enrollAccount = function (token) {
  return Meteor.absoluteUrl('enroll-account/' + token);
};
Run Code Online (Sandbox Code Playgroud)