Пользовательский шаблон регистрации Meteor

В моем приложении я хочу заполнить базу данных пользователями и отправить им ссылку для регистрации, чтобы активировать их учетную запись (и выбрать пароль). Я также хочу, чтобы они проверили/изменили некоторые данные профиля.

На сервере я заполняю базу данных следующим образом:

Meteor.startup(function () {
  if(Meteor.users.find().count() === 0) {
    var user_id = Accounts.createUser({ email: '[email protected]', profile: { some: 'profile' } });
    Accounts.sendEnrollmentEmail(user_id);
  }
})

Ссылка для регистрации отправляется, как и ожидалось, но я хочу создать собственный шаблон для щелчка по URL-адресу в электронном письме. Желательно обрабатывается железом-роутером. (Не используя пакет account-ui).

Я пробовал такие вещи, как перенаправление пользователя на настраиваемый маршрут, например:

var doneCallback, token;

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

который не работает (он меняет URL-адрес, но не отображает мой шаблон)

Я также попытался изменить URL-адрес регистрации на сервере следующим образом:

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

Но когда я это делаю, обратный вызов Accounts.onEnrollmentLink не срабатывает. Кроме того, изменение URL-адреса не задокументировано, поэтому я не уверен, что это хорошая практика.

Любая помощь приветствуется.


person Sander Garretsen    schedule 21.12.2014    source источник


Ответы (2)


В моем приложении я делаю так

        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()
                    }
                }
            }
       })

Поскольку URL-адрес регистрации выглядит следующим образом

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);
};
person Sasikanth    schedule 21.12.2014
comment
Это выглядит интересно. Я не думал о публикации и подписке на «зачисленных пользователей», как вы. Спасибо! Теперь, как вы устанавливаете URL-адрес регистрации для электронной почты? с Accounts.urls.enrollAccount? - person Sander Garretsen; 22.12.2014
comment
Я отправляю utl, используя Accounts.sendEnrollmentEmail(userId, email); по умолчанию - person Sasikanth; 22.12.2014
comment
Ах я вижу. Я думал, что это невозможно, потому что он создает URL-адрес с хэш-тегом (localhost:3000/# /enroll-account/) и боялся, что метеор сотворит с ним какую-нибудь магию. Спасибо, iAmME, принял ваш ответ. - person Sander Garretsen; 22.12.2014
comment
Отредактированный ответ, посмотрите, как я изменяю URL-адрес, я написал этот код при запуске сервера. - person Sasikanth; 22.12.2014
comment
Это абсолютно лучшее объяснение регистрации, которое я нашел - спасибо! - person Rico Leuthold; 01.07.2015

Я боюсь, что сейчас это невозможно, я изменил html и css, используя функцию «рендеринга», но у нее есть некоторые проблемы с задержкой.

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';
    }
});
person Julio Marins    schedule 23.02.2015