소스 검색

Remove invitation code if email sending failed, improve registration process with invitation

lkisme 8 년 전
부모
커밋
f82941550a
4개의 변경된 파일19개의 추가작업 그리고 12개의 파일을 삭제
  1. 2 2
      client/components/settings/invitationCode.js
  2. 0 2
      config/accounts.js
  3. 1 0
      models/settings.js
  4. 16 8
      models/users.js

+ 2 - 2
client/components/settings/invitationCode.js

@@ -1,6 +1,6 @@
 Template.invitationCode.onRendered(() => {
-  const disableRegistration = Settings.findOne().disableRegistration;
-  if(!disableRegistration){
+  const setting = Settings.findOne();
+  if (!setting || !setting.disableRegistration) {
     $('#invitationcode').hide();
   }
 });

+ 0 - 2
config/accounts.js

@@ -13,7 +13,6 @@ AccountsTemplates.addFields([{
   displayName: 'Invitation Code',
   required: false,
   minLength: 6,
-  errStr: 'Invitation code doesn\'t exist',
   template: 'invitationCode',
 }]);
 
@@ -69,4 +68,3 @@ if (Meteor.isServer) {
     };
   });
 }
-

+ 1 - 0
models/settings.js

@@ -104,6 +104,7 @@ if (Meteor.isServer) {
         text: TAPi18n.__('email-invite-register-text', params, lang),
       });
     } catch (e) {
+      InvitationCodes.remove(_id);
       throw new Meteor.Error('email-fail', e.message);
     }
   }

+ 16 - 8
models/users.js

@@ -91,6 +91,10 @@ Users.attachSchema(new SimpleSchema({
     type: [String],
     optional: true,
   },
+  'profile.icode': {
+    type: String,
+    optional: true,
+  },
   services: {
     type: Object,
     optional: true,
@@ -401,11 +405,12 @@ if (Meteor.isServer) {
       return user;
     }
 
-    const iCode = options.profile.invitationcode | '';
-
-    const invitationCode = InvitationCodes.findOne({code: iCode, valid:true});
+    if (!options || !options.profile) {
+      throw new Meteor.Error('error-invitation-code-blank', 'The invitation code is required');
+    }
+    const invitationCode = InvitationCodes.findOne({code: options.profile.invitationcode, email: options.email, valid: true});
     if (!invitationCode) {
-      throw new Meteor.Error('error-invitation-code-not-exist');
+      throw new Meteor.Error('error-invitation-code-not-exist', 'The invitation code doesn\'t exist');
     }else{
       user.profile = {icode: options.profile.invitationcode};
     }
@@ -487,16 +492,19 @@ if (Meteor.isServer) {
     //invite user to corresponding boards
     const disableRegistration = Settings.findOne().disableRegistration;
     if (disableRegistration) {
-      const user = Users.findOne(doc._id);
-      const invitationCode = InvitationCodes.findOne({code: user.profile.icode, valid:true});
+      const invitationCode = InvitationCodes.findOne({code: doc.profile.icode, valid:true});
       if (!invitationCode) {
-        throw new Meteor.Error('error-user-notCreated');
+        throw new Meteor.Error('error-invitation-code-not-exist');
       }else{
         invitationCode.boardsToBeInvited.forEach((boardId) => {
           const board = Boards.findOne(boardId);
           board.addMember(doc._id);
         });
-        user.profile = {invitedBoards: invitationCode.boardsToBeInvited};
+        if (!doc.profile) {
+          doc.profile = {};
+        }
+        doc.profile.invitedBoards = invitationCode.boardsToBeInvited;
+        Users.update(doc._id, {$set:{profile: doc.profile}});
         InvitationCodes.update(invitationCode._id, {$set: {valid:false}});
       }
     }