Перенаправление после входа в систему с помощью angular2-meteor

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

Итак, если пользователь вышел из системы - он может видеть только домашнюю страницу. После входа в систему он перенаправляется в /dashboard.

Как я могу сделать это с маршрутизаторами angular2 и пакетом учетных записей метеора?

Заранее благодарю за любую помощь.


person Marek Has    schedule 05.01.2016    source источник


Ответы (2)


К сожалению, пакет account-ui, по-видимому, не предоставляет ловушку жизненного цикла или какой-либо другой очевидный способ запуска дополнительного кода при срабатывании методов входа и выхода.

Так что это тоже не самое элегантное решение, но оно работает — используя angular2-meteor-accounts-ui (доступно на GitHub и NPM):

import { Component, DoCheck } from '@angular/core';
import { Router, ROUTER_DIRECTIVES } from '@angular/router';
import 'rxjs/Rx';
import { Meteor } from 'meteor/meteor';
import { MeteorComponent } from 'angular2-meteor';
import { InjectUser, LoginButtons } from 'angular2-meteor-accounts-ui';

import template from './app.component.html';

@Component({
  selector: 'app',
  template,
  directives: [ LoginButtons, ROUTER_DIRECTIVES ]
})
@InjectUser('user')
export class AppComponent extends MeteorComponent implements DoCheck {
  private isLoggedIn: boolean = false;
  private user: Meteor.User;

  constructor( private router: Router ) { super(); }

  ngDoCheck() {
    if (!this.isLoggedIn && !!this.user) {
      this.isLoggedIn = true;
      if (this.router.url === '/') {
        this.router.navigate( ['/dashboard'] );
      }
    } else if (this.isLoggedIn && this.user === null) {
      this.isLoggedIn = false;
      if (this.router.url === '/dashboard') {
        this.router.navigate( ['/'] );
      }
    }
  }
}

На форумах Meteor также есть сообщение, описывающее другое решение, в котором не используется пакет account-ui, а вместо этого создается собственный метод login(), здесь:

https://forums.meteor.com/t/angular2-meteor-redirect-after-successful-login-for-custom-login-form/19312

person DSchnellDavis    schedule 28.08.2016

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

$scope.autorun(() => {
  let currentUser = Meteor.user();
  if (currentUser)
    $state.go('home');
});
person Brendan Turner    schedule 05.01.2016
comment
Спасибо за совет, но разве это не решение для angular1? Как я могу сделать то же самое с ng2? - person Marek Has; 05.01.2016
comment
Что вы используете для форм регистрации/входа? - person Brendan Turner; 05.01.2016
comment
2 специальных пакета для ng2-meteor: barbatus:ng2-meteor-accounts-ui и barbatus:ng2-meteor-accounts - person Marek Has; 05.01.2016
comment
Поскольку это всего лишь простая оболочка для account-ui, вам может быть лучше использовать Meteor.loginWithPassword() что позволит вам перенаправить обратный вызов. - person Brendan Turner; 05.01.2016
comment
Angular 2.0 использует это вместо $scope. - person bre; 16.01.2016