ログイン後にユーザーがダッシュボードにリダイレクトされるときに、その単純な UI パターンを使用したいと思います。
そのため、ユーザーがログアウトすると、ホームページのみが表示されます。ログイン後、彼は /dashboard にリダイレクトされます。
angular2ルーターと流星アカウントパッケージでそれを行うにはどうすればよいですか?
助けてくれてありがとう。
ログイン後にユーザーがダッシュボードにリダイレクトされるときに、その単純な UI パターンを使用したいと思います。
そのため、ユーザーがログアウトすると、ホームページのみが表示されます。ログイン後、彼は /dashboard にリダイレクトされます。
angular2ルーターと流星アカウントパッケージでそれを行うにはどうすればよいですか?
助けてくれてありがとう。
残念ながら、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 フォーラムには、accounts-ui パッケージを使用せず、代わりに独自の login() メソッドを作成するという別のソリューションを説明する投稿があります。
これは最も洗練されたソリューションではないかもしれませんが、ログイン後に autorun を使用してユーザーをリダイレクトすることになりました。
$scope.autorun(() => {
let currentUser = Meteor.user();
if (currentUser)
$state.go('home');
});