условная маршрутизация с глобальными переменными

#angular

#angular

Вопрос:

Я разрабатываю приложение angular, это пример Stackblitz.

Как показано в stackblitz, я создал глобальную переменную с именем isLoggedIn, и когда пользователь войдет в систему, я изменю значение на true, иначе только false, и я смогу получить это значение по всему приложению. Но здесь мое требование заключается в том, что я хочу поставить условную маршрутизацию. Во всех компонентах я могу получить isLoggedIn логическую переменную, и я могу проверить условия. Вот моя проблема в app-routing.module.ts файле, как я могу получить эту переменную и проверить наличие условной маршрутизации.

Если пользователь вошел в систему, я хочу перенаправить на /home страницу, иначе перенаправить на ‘/ login’. Как я могу проверить это значение здесь.

   {path: 'login', component: LoginComponent}
  {path: 'home', component: HomeComponent}
  

Или всякий раз, когда пользователь вводит /home URL, можем ли мы ограничить на уровне компонентов использование isLoggedIn логической переменной?

 @Component({
  selector: 'app-root',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent {
}
  

Комментарии:

1. Вы пробовали использовать Guardians?

2. Нет, просто я использую со статическими учетными данными, если оба совпадают, тогда я маршрутизирую /home

Ответ №1:

Я думаю, что здесь сработала бы защита. Что-то вроде этого…

 import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { AuthService } from '../services/auth.service';

@Injectable({

  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

  constructor(public authSvc: AuthService, public router: Router) {}

  canActivate(): boolean {
    this.authSvc.isLogggedIn().then(loggedIn => {
      if (!loggedIn) {
        this.router.navigate(['unauthorised']);
        return false;
      }
    });
    return true;
  }

}
  

Затем, когда вы определяете свои маршруты, включите охрану в объект маршрутизации

   {path: 'login', canActivate: [AuthGuard], component: LoginComponent}
  {path: 'home', component: HomeComponent}
  

Надеюсь, это вам поможет