サインイン後、Angular5は前のページにリダイレクトします。
手動でURLを押すと、ログインしていない場合はログインページにリダイレクトされますが、ログイン後は入力したURLにリダイレクトされますが、これを使用してホームページにリダイレクトできます。
this.router.navigate(['/homepage']);
いくつかのアイデアがありますか?
ガードを使用してログインページにリダイレクトする場合、ソースURLをqueryParams
に次のように配置できます。
canActivate(next: ActivatedRouteSnapshot,
state: RouterStateSnapshot) {
if (this.authService.isAuthenticated()) {
return true;
} else {
console.log('Could not authenticate');
this.router.navigate(['login'],{queryParams:{'redirectURL':state.url}});
return false;
}
}
ログイン後、クエリパラメータから元のページのURLを取得できます。
let params = this.route.snapshot.queryParams;
if (params['redirectURL']) {
this.redirectURL = params['redirectURL'];
}
...
if (this.redirectURL) {
this.router.navigateByUrl(this.redirectURL,)
.catch(() => this.router.navigate(['homepage']))
} else {
this.router.navigate(['homepage'])
}
ホームページにアクセスする前にURLを送信して、そこで使用することができます
@Component({ ... })
class SomePageComponent {
constructor(private route: ActivatedRoute, private router: Router) {}
checkLogin() {
if (!this.auth.loggedIn()) {
this.router.navigate(['/homepage`], { queryParams: { redirectTo: this.route.snapshot.url } });
}
}
}
したがって、ログインコンポーネントで、次のようにqueryParamsにアクセスできます。
@Component({...})
class LoginComponent {
constructor(private router: Router, private route: ActivatedRoute) {}
backToPreviousPage() {
this.router.navigate([this.route.snapshot.queryParam.get('redirectTo')]);
}
}
私の場合、queryParamsは正しく機能しません。これは、ユーザーがログインし、次にサインアップルートに移動した場合、クエリパラメーターを保持する必要があるためです。しかし、ログインする前にさらに手順がある場合、ユーザーがページを更新する場合、または地下鉄でインターネットが悪かった場合、または何か他のことが起こった場合、彼はパラメータを失い、知っている人にリダイレクトされます...しかし、リダイレクトするために必要なURLを設定した場合localStorageに移動し、login/signup/someelseステップの後、必要なURLにリダイレクトして、以前にlocalStorageから文字列を削除できます。
// needed page
localStorage.setItem('redirectTo', this.router.url);
this.router.navigateByUrl('/login');
// login/signup/else step page
success => {
const redirect = localStorage.getItem('redirectTo');
if (redirect) {
localStorage.removeItem('redirectTo');
this.router.navigate(redirect);
} else {
this.router.navigate('defaultpath');
}
}
authService url: string
で変数を宣言し、auth.gaurd.ts
でその変数を使用します
this.authService.redirectUrl = url;
this.navigateTo("/login");
return false;
そして、login.ts
でコーディングします
if (this.authService`enter code here`.redirectUrl) {
this.router.navigateByUrl(this.authService.redirectUrl);
} else {
this.router.navigateByUrl("/home");
}