使用angular2-meteor登录后重定向

时间:2016-01-05 13:30:36

标签: meteor angular meteor-accounts angular-meteor angular2-routing

我想在登录后将用户重定向到仪表板时使用这种简单的UI模式。

因此,如果用户注销 - 他只能看到主页。登录后,他被重定向到/ dashboard。

如何使用angular2路由器和meteor帐户包来实现这一目标?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

不幸的是,在触发登录和注销方法时,accounts-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

答案 1 :(得分:-1)

这可能不是最优雅的解决方案,但我最终使用自动运行功能在登录后重定向用户。

$scope.autorun(() => {
  let currentUser = Meteor.user();
  if (currentUser)
    $state.go('home');
});