2017-01-31 5 views
0

Мое приложение использует Meteor + Angular2 (Это приложение основано на Urigo's tutorial) (package.json в конце)Исключение в доставке результат вызова «войти в систему»: Регистрация

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

Exception в доставке результат вызова 'логин': Регистрация/Http: // Localhost:? 3000/приложение/app.js хэш = 5d5262809ea4c507a654caa1a722dfd2ec17a3b9: 164: 21 userCallback @http://localhost:3000/packages/accounts-password.js?hash=6d4e41828e1dfcc45ff74267779a4e5ecdcd9eda:105:23

Мой пользователь успешно зарегистрирован в моем приложении и зарегистрирован, но не перенаправлен на его профиль ... Я пытался использовать с и без ngZone ... Возможно, я что-то недопонимаю.

Это мой signup.component.ts код Регистрация:

signup() { 
if (this.signupForm.valid) { 
    let user = { 
    email: this.signupForm.value.email, 
    password: this.signupForm.value.password, 
    profile: { 
     player: { 
     playersName: this.signupForm.value.playersName, 
     region: this.signupForm.value.region 
     } 
    } 
    } 
    Meteor.call('createUserWithRole', user, function(err, userId) { 
    Meteor.loginWithPassword(user.email, user.password, function(err, success){ 
     this.zone.run(() => { 
     if (err) { 
      this.error = err; 
     } else { 
      this.router.navigate(['/my-profile']); 
     } 
     }); 
    }); 
    }); 
} 

}

И это мой сервер/пользователь/user.methods.ts

Meteor.methods({ 
'createUserWithRole': function(data) { 
    //console.log(data); 
    check(data, { 
     email: String, 
     password: String, 
     profile: { 
      player: { 
       playersName: String, 
       region: String 
      } 
     } 
    }); 
    let userId; 
    userId = Accounts.createUser({ 
     email: data.email, 
     password: data.password, 
     profile: { 
      newHistory: false, 
      player: { 
       playerId: null, 
       avatar: null, 
       playerName: data.profile.player.playersName, 
       playercname: data.profile.player.playersName.replace(/\s+/g, '').toLowerCase(), 
       region: data.profile.player.region, 
       revisionDate: null, 
       lastManualUpdate: null 
      } 
     } 
    }); 

    Roles.addUsersToRoles(userId, [ 
     'active', 
     '1man_q', 
     '2men_q', 
     '3men_q', 
     '4men_q', 
     '5men_q', 
     'global_chat', 
     'captain', 
     'report', 
     'chat_global', 
     'chat_lobby', 
     'comment', 
     'vote', 
     'support', 
     'default' 
    ], 'user_default'); 
    return data; 
},...others methods...skipped... 

и мой пакет .json

{ 
    "name": "angular2-meteor-base", 
    "private": true, 
    "scripts": { 
    "start": "meteor --settings settings-development.json", 
    "start:prod": "meteor run --production", 
    "build": "meteor build ./build/", 
    "clear": "meteor reset", 
    "meteor:update": "meteor update --all-packages", 
    "test": "meteor test --driver-package practicalmeteor:mocha", 
    "test:ci": "meteor test --once --driver-package dispatch:mocha-phantomjs" 
    }, 
    "devDependencies": { 
    "@types/chai": "3.4.34", 
    "@types/meteor": "^1.3.31", 
    "@types/mocha": "2.2.34", 
    "chai": "3.5.0", 
    "chai-spies": "0.7.1", 
    "meteor-node-stubs": "0.2.4" 
    }, 
    "dependencies": { 
    "@angular/common": "2.4.1", 
    "@angular/compiler": "2.4.1", 
    "@angular/core": "2.4.1", 
    "@angular/forms": "2.4.1", 
    "@angular/platform-browser": "2.4.1", 
    "@angular/platform-browser-dynamic": "2.4.1", 
    "@angular/router": "3.4.1", 
    "angular2-meteor": "0.7.1", 
    "angular2-meteor-accounts-ui": "^1.0.0", 
    "angular2-meteor-polyfills": "0.1.1", 
    "angular2-meteor-tests-polyfills": "0.0.2", 
    "babel-runtime": "^6.18.0", 
    "bootstrap": "^4.0.0-alpha.3", 
    "meteor-rxjs": "0.4.7", 
    "ng2-bootstrap": "^1.3.1", 
    "reflect-metadata": "0.1.9", 
    "rxjs": "5.0.2", 
    "zone.js": "0.7.4" 
    } 
} 

ответ

1

Вы должны связать вашу функцию к текущему environnent.

Meteor.call('createUserWithRole', user, function(err, userId) { 
       Meteor.loginWithPassword(user.email, user.password, function(err, success) { 
        this.zone.run(function(){ 
         if (err) { 
          this.error = err; 
         } else { 
          this.router.navigate(['/my-profile']); 
         } 
        }.bind(this)); 
       }.bind(this)); 
      }.bind(this)); 
+1

Добро пожаловать в СО, Пожалуйста, добавьте больше объяснений в свой ответ, поскольку только ответ на код не помогает. – Jeet

0

Я думаю, это m это связано с закрытием JavaScript. this.router не существует в этом случае, но я не уверен, почему вы получаете ошибку, которую вы получаете.

Попробуйте это:

Meteor.call('createUserWithRole', user, (err, userId) => { 
    Meteor.loginWithPassword(user.email, user.password, (err, success) => { 
     this.zone.run(() => { 
     if (err) { 
      this.error = err; 
     } else { 
      this.router.navigate(['/my-profile']); 
     } 
     }); 
    }); 
    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^