2017-02-10 3 views
1

Я хочу создать небольшую систему приглашения (Пользователь отправляет электронное письмо другу с кодом начисления -> друг нажимает на общедоступный веб-сайт, каждый может пойти -> ставит свой код приглашения в текстовое поле и метеорные поиски для этого кода, если он может найти код, все в порядке, и он может продолжать, но когда метеорит не может найти код, он является одним случайным пользователем в Интернете, и он не должен продолжатьMeteor Как создать систему приглашений

Так что мне нужно что-то, что сравнивает введенное значение с данными в коллекции

это мой файл JS, возможно, некоторые хорошие вещи уже внутри него;)

Template.Invite.onCreated(function() { 
    this.subscribe('invites'); 
}); 

Template.Invite.events({ 
    'submit .Invite'(event) { 
    event.preventDefault(); 
    var Invite = event.target.Invite.value; 

    } 
}); 

Template.Invite.helpers({ 
    results: function(){ 
     return Invites.find({ 
      code: Session.get('Invite'), 

      if (Invite = Invite) 
      { 
      FlowRouter.go('/'); 
      } 


     }); 
    } 
}); 

моей опубликую часть в main.js

Meteor.publish("invites", function() { 
     return Invites.find(); 
    }) 

и не важно HTML

<template name="Invite"> 
    <form class="Invite" > 
      <input type="text" name="Invite" placeholder="Invite Code" /> 
      <input type="submit" value="Bestätigen" /> 
     </form> 
</template> 

вставки в Invite Collection работает уже, но не находят и сравнить

Спасибо за ваше время и помощь;)

ответ

3

Я создал систему приглашений несколько раз, и вот как я это сделал.

Когда пользователь отправляет приглашение, необходимо создать новый документ в коллекции приглашения, как это:

import { Random } from 'meteor/random'; 

const code = Random.hexString(16); 

invitation = { 
    'code': code, 
    'sentTo': '[email protected]', 
    'accepted': false, 
} 

Затем, когда пользователь пытается зарегистрироваться вам нужно вызвать метод, который захватывает их код приглашения и сравнивает его с кодом в базе данных

Meteor.methods({ 
    'acceptInvitation'(code) { 
     check(code, String); 

     // find invitation in database 
     let invitation = Invitations.findOne({ 'code': code}); 

     //check if invitation exists and if it hasn't already been accepted 
     if(invitation && invitation.accepted == false) { 
      //update invitation to now be accepted 
      Invitations.update(
       { '_id': invitation._id}, 
       { $set: { accepted: true } 
      ); 
      return true; 
     } else { 
      throw new Meteor.Error('invalid', 'Your invitation code is not valid'); 
     } 
    } 
}); 

чтобы сделать систему приглашения еще лучше, когда вы отправляете приглашение по электронной почте вы можете передать код приглашения в качестве параметра в URL. Затем, когда пользователь нажимает ссылку на приглашение, вы можете получить код из URL-адреса и автоматически поместить его в регистрационную форму для них. Это предотвращает их ошибки при копировании и вставке!

+0

Это общий и эффективный образец. Использование маршрута для ссылки на приглашение, например '/ приглашение /: _ id', позволяет легко отправить кому-то ссылку на приглашение. Я использую '_id' объекта' Приглашение' как уникальную ссылку для приглашения. Я также отслеживаю, сколько раз была нажата ссылка, чтобы помочь измерять коэффициенты конверсии в приглашении воронки.> Click> signup –

+0

Привет @ Давай, этот код гениально, спасибо вам очень много (это Метеор/случайный пакет?) – Michael

+0

No prob - да это: https://docs.meteor.com/packages/random.html – Sean