Pesquisa de site

javascript - Executar um serviço antes que a aplicação ou componentes sejam carregados Angular 7


Estou construindo uma aplicação usando Angular 7, eu lidei com as chamadas de API, o sistema de autenticação com Token JWT usando C#, e também atualizando o LocalStorage() quando necessário, quando o usuário faz login e logout, e tudo isso está funcionando perfeitamente.

Meu problema é que eu quero que ele execute uma verificação de login como um middleware dentro da aplicação, em vez de no método de ciclo de vida - ng.onInit(). Como faço para fazer isso?

Existe uma maneira de executar eventos de ciclo de vida como um componente de entrada ou serviço. Ou seja, antes de qualquer componente ser carregado, ele é capaz de verificar se o usuário está logado ou não e redirecionar via Router para uma página desejada.

Resposta #1

O Guard é baseado nas rotas... então eu acho que você deveria preferir uma solução de módulo/serviço.

import { APP_INITIALIZER } from '@angular/core';

então adicione-o como um provedor assim :

 export function initApp(initService: YourInitService) {
  return () => { 
    initService.Init();
  }
}
    { provide: APP_INITIALIZER,useFactory: initApp, deps: [YourInitService], multi: true } 

Resposta #2

Você deve verificar o Guard no Angular, especialmente o canActivate Guard: https://angular.io/guide/router

Um guarda é criado assim:

@Injectable({
  providedIn: 'root'
})
export class MyGuard implements CanLoad {
 constructor() {}

 canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | 
 Promise<boolean> | boolean {
   const x = true;
   if (x) {
     return true; // It allows access to the route;
   } else {
      // redirect where you want;
     return false; // it doesnt allow to access to the route
  }
 }
}

Então, no seu módulo de roteamento:

{
path: "yourRoute",
canActivate: [MyGuard],
component: YourComponent
}

Para autenticação, você tem uma boa biblioteca que utiliza guard aqui: https://www.npmjs.com/package/ngx-auth