在我的应用程序中,我想为用户播种数据库并向他们发送注册链接以激活他们的帐户(并选择密码)。我还希望他们验证/更改一些个人资料数据。
在服务器上,我按如下方式为数据库播种:
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没有记录,所以我不确定它是一个好的做法。
感谢任何帮助。
答案 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';
}
});