自定义Meteor注册模板

时间:2014-12-21 20:20:40

标签: 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);
  }
})

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

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

var doneCallback, token;

Accounts.onEnrollmentLink(function (token, done) {
  doneCallback = done;
  token = token;
  Router.go('MemberEnroll')
});

无法正常工作(它会更改网址但不会渲染我的模板)

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

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

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

感谢任何帮助。

2 个答案:

答案 0 :(得分: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()
                    }
                }
            }
       })

因为注册网址是这样的

http://www.yoursite.com/enroll-account/hkhk32434kh42hjkhk43

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

在我的刊物

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

从用户那里获取密码后

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('/');
   }
 })

注册链接

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

答案 1 :(得分:0)

我害怕现在不可能,我所做的是使用“渲染”功能更改html和css,但它有一些延迟的probs

Meteor.startup(function(){
    Template["_enrollAccountDialog"].rendered = function(){
        document.getElementById('enroll-account-password-label').innerHTML = 'Escolha sua senha';
        $('.accounts-dialog').css('background-color','#f4f5f5');
        $('.accounts-dialog').css('text-align','center');
        $('.accounts-dialog').removeAttr('width');
        document.getElementById('login-buttons-enroll-account-button').className = ' create-account-button'; 
        document.getElementById('login-buttons-enroll-account-button').innerHTML = 'Criar conta';
    }
});