Angular - страница с ограниченным доступом отображается как перенаправления window.open в guard

Я реализую canActivate Guard, который имеет логику для перенаправления на сайт входа в систему, если пользователь не вошел в систему. До сих пор все примеры и исправления, с которыми я сталкивался, имеют дело со страницей входа, определенной в самом Angular. В моем случае логин находится на отдельном поддомене.

Перенаправление работает, как и ожидалось, но из-за внешнего перенаправления в браузере отображается ограниченная страница, а затем начинается перенаправление.

Я пробовал и window.open, и документ через @inject.

Использование Angular 5.2.5

Это мой auth.guard.ts:

import { Inject, Injectable } from '@angular/core';
import { DOCUMENT } from '@angular/common';

import { Router, CanActivate, CanActivateChild, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { CookieService } from 'ngx-cookie-service';
import { AlmVars } from '@alm/ngwebpack-vars/alm-vars.const';


@Injectable()

export class AuthGuard implements CanActivate, CanActivateChild {
    readonly almVars = AlmVars;

    constructor(private router: Router, private cookieService: CookieService, @Inject(DOCUMENT) private document: any) {

    }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        if (this.cookieService.get('almVToken')) {
            return true;
        }

        // this.document.location.href = '//login.' + this.almVars.hostname + '?referer=' + this.almVars.app;
        window.open('//login.' + this.almVars.hostname + '?referer=' + this.almVars.app, '_self');

        return false;
    }
}

приложение-routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

import { AppResolver } from './app.resolver';
import {AuthGuard} from './shared/alm-auth.guard';
import {ProfileComponent} from './profile/profile.component';


const appRoutes: Routes = [{
    path: '',
    component: ProfileComponent,
    canActivate: [
        AuthGuard
    ],
}];

@NgModule({
    imports: [
        RouterModule.forRoot(appRoutes),
    ],
    exports: [
        RouterModule,
    ],
    providers: [
        AppResolver,
    ]
})

export class AppRoutingModule {

}

0 ответов

Другие вопросы по тегам