IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Angular Discussion :

Angular Guard Redirect


Sujet :

Angular

  1. #1
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut Angular Guard Redirect
    Bonjour,
    Je sollicite votre aide pour une situation dont je ne comprends pas.
    l'objectif est , en cas de non connection,^d' être rediriger vers la page de connection.
    Pour cela, j'utilise guard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    
    //const LOGIN_URL = '/auth/login';
    const LOGIN_URL = '/login';
    
    @Injectable({
      providedIn: 'root',
    })
    export class AuthenticationGuard implements CanActivate {
      constructor(private router: Router, private credentialsService: CredentialsService) {}
    
      canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        if (this.credentialsService.isAuthenticated()) {
          return true;
        }
    
        log.debug('Not authenticated, redirecting and adding redirect url...');
        console.log('before goiing to login form');
        this.router.navigate([LOGIN_URL], { queryParams: { redirect: state.url }, replaceUrl: true });
        console.log('after goiing to login form');
        return false;
      }
    }
    Guard Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import { AuthRoutingModule } from './auth-routing.module'; 
     
    @NgModule({
      imports: [AuthRoutingModule ], 
    })
    export class AuthModule {}
    Routing

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    const routes: Routes = [
      {
        path: '',
        component: AdminLayoutComponent,
        canActivate: [AuthenticationGuard],
        //canActivate: [AuthGuard],
        //canActivateChild: [AuthGuard],
        children: [
          { path: '', redirectTo: 'home', pathMatch: 'full' },
          { path: 'home', component: HomeComponent, data: { title: 'Home', titleI18n: 'Home' }, },
        ],
      },
      {
        //path: 'auth',
        path: 'login',
        component: AuthLayoutComponent,
        children: [
          { path: 'login', redirectTo: '/signin', pathMatch: 'full' },
          { path: 'signin', component: SigninComponent, data: { title: 'Login', titleI18n: 'login' } },
        ],
      },
      { path: '**', redirectTo: '' },
    ];
     
    @NgModule({
      imports: [RouterModule.forRoot(routes)],
      exports: [RouterModule],
      providers: [],
    })
    export class RoutesRoutingModule { }
    Routing Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    import { NgModule } from '@angular/core';
    import { SharedModule } from '../@shared';
    import { RoutesRoutingModule } from './routes-routing.module';
     
    import { HomeComponent } from '../modules/home/home.component';
    import { SigninComponent } from '../modules/signin/signin.component';
    //import { RegisterComponent } from '../modules/register/register.component';
     
    //const COMPONENTS = [HomeComponent,SigninComponent,]; // RegisterComponent];
    const COMPONENTS = [];
    const COMPONENTS_DYNAMIC = [];
     
    @NgModule({
      imports: [SharedModule, RoutesRoutingModule],
      declarations: [...COMPONENTS, ...COMPONENTS_DYNAMIC],
      //exports: [RoutesRoutingModule] 25/08/2020
      //entryComponents: COMPONENTS_DYNAMIC,
    })
    export class RoutesModule {}

    App Module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import { RoutesModule } from './routes/routes.module';
     
     
    @NgModule({
      declarations: [AppComponent],
      imports: [
        RoutesModule,
      ],
    })
    export class AppModule {}
    {QUOTE]
    a l'execution, j'ai une page blanche avec dans la console les messages
    Not authenticated, redirecting and adding redirect url...
    before goiing to login form
    after goiing to login form
    [/QUOTE]

    cela voudrait dire que le guard s'execute mais à la ligne ne fait peute rien ou ne trouve pas url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const LOGIN_URL = '/login';
    this.router.navigate([LOGIN_URL], { queryParams: { redirect: state.url }, replaceUrl: true });

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    c'est assez simple:
    il faut utiliser: canActivate sur toutes les routes qui doivent être authentifié pour y accéder

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    { path: 'forums/:forum_alias/post', component: PostComponent, canActivate: [AuthGuardService] },
    et écrire le code de la classe: AuthGuardService


    http://gnomeontherun.com/2017/03/02/...ts-in-angular/

  3. #3
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    c'est ce qui est fait voir en gras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    const routes: Routes = [
      {
        path: '',
        component: AdminLayoutComponent,
        canActivate: [AuthenticationGuard],
        //canActivate: [AuthGuard],
        //canActivateChild: [AuthGuard],
        children: [
          { path: '', redirectTo: 'home', pathMatch: 'full' },
          { path: 'home', component: HomeComponent, data: { title: 'Home', titleI18n: 'Home' }, },
        ],
      },
      {
        //path: 'auth',
        path: 'login',
        component: AuthLayoutComponent,
        children: [
          { path: 'login', redirectTo: '/signin', pathMatch: 'full' },
          { path: 'signin', component: SigninComponent, data: { title: 'Login', titleI18n: 'login' } },
        ],
      },
      { path: '**', redirectTo: '' },
    ];
     
    @NgModule({
      imports: [RouterModule.forRoot(routes)],
      exports: [RouterModule],
      providers: [],
    })
    export class RoutesRoutingModule { }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    import { Injectable } from '@angular/core';
    import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
     
    import { Logger } from '../../@core';
    import { CredentialsService } from '@core/services/credentials.service';
     
    const log = new Logger('AuthenticationGuard');
    //const LOGIN_URL = '/auth/login';
    const LOGIN_URL = '/login';
     
    @Injectable({
      providedIn: 'root',
    })
    export class AuthenticationGuard implements CanActivate {
      constructor(private router: Router, private credentialsService: CredentialsService) {log.debug(' auth gaurd call...');}
     
      canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        if (this.credentialsService.isAuthenticated()) {
          return true;
        }
     
        log.debug('Not authenticated, redirecting and adding redirect url...');
        console.log('before goiing to login form');
        this.router.navigate([LOGIN_URL], { queryParams: { redirect: state.url }, replaceUrl: true });
        console.log('after goiing to login form');
        return false;
      }
    }
     
    }

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    import { Injectable } from '@angular/core';
    import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
     
    import { Logger } from '../../@core';
    import { CredentialsService } from '@core/services/credentials.service';
     
    const log = new Logger('AuthenticationGuard');
    //const LOGIN_URL = '/auth/login';
    const LOGIN_URL = '/login';
     
    @Injectable({
      providedIn: 'root',
    })
    export class AuthenticationGuard implements CanActivate {
      constructor(private router: Router, private credentialsService: CredentialsService) {log.debug(' auth gaurd call...');}
     
      canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        if (this.credentialsService.isAuthenticated()) {
          return true;
        }
     
        log.debug('Not authenticated, redirecting and adding redirect url...');
        console.log('before goiing to login form');
        this.router.navigate([LOGIN_URL], { queryParams: { redirect: state.url }, replaceUrl: true });
        console.log('after goiing to login form'  + LOGIN_URL);
        return false;
      }
    }
     
    }

    ça donne quoi ? console.log('after goiing to login form' + LOGIN_URL);

  5. #5
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    console


    HMR] Waiting for update signal from WDS...
    logger.service.ts:107 [App] init
    logger.service.ts:107 [I18nService] Language set to fr-FR
    core.js:26832 Angular is running in development mode. Call enableProdMode() to enable production mode.
    logger.service.ts:107 [AuthenticationGuard] auth gaurd call...
    logger.service.ts:107 [AuthenticationGuard] Not authenticated, redirecting and adding redirect url...
    auth.guard.ts:23 before going to login form
    auth.guard.ts:25 after going to login form /login
    client:48 [WDS] Hot Module Replacement enabled.
    client:52 [WDS] Live Reloading enabled.

  6. #6
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    sur le navigateur
    ....../login


    tu tombes bien sur la page login ?

  7. #7
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    voici l'url du navigateur et j'ai une page blanche

  8. #8
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    en modifiant la route par ceci, la page s'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     {
        //path: 'auth',
        path: 'login',
        component: AuthLayoutComponent,
        children: [
          { path: '', component: SigninComponent, data: { title: 'Login', titleI18n: 'login' } },
          { path: 'signin', component: SigninComponent, data: { title: 'Login', titleI18n: 'login' } },
        ],
      },
    Mon objectif final c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     {
        path: 'auth',
        component: AuthLayoutComponent,
        children: [
          { path: 'login', component: SigninComponent, data: { title: 'Login', titleI18n: 'login' } },
          { path: 'signin', component: SigninComponent, data: { title: 'Login', titleI18n: 'login' } },
        ],
      },
    alord comment definir l'url dans le service guard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //const LOGIN_URL = '/auth/login';
    const LOGIN_URL = '/login';
     
    this.router.navigate([LOGIN_URL], { queryParams: { redirect: state.url }, replaceUrl: true });

  9. #9
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    heuuu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const LOGIN_URL = '/auth/login';
    //const LOGIN_URL = '/login';
     
    this.router.navigate([LOGIN_URL], { queryParams: { redirect: state.url }, replaceUrl: true });

    teste:
    http://localhost:4400/auth/login

  10. #10
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Points : 84
    Points
    84
    Par défaut
    ok ça march, merci bien

Discussions similaires

  1. Redirection angular 1.5
    Par awesomeman dans le forum AngularJS
    Réponses: 0
    Dernier message: 25/04/2018, 19h24
  2. redirection de trames
    Par Fry dans le forum Développement
    Réponses: 2
    Dernier message: 06/01/2004, 13h31
  3. [VB.NET]Double redirection.
    Par CammCamm dans le forum ASP.NET
    Réponses: 9
    Dernier message: 24/11/2003, 15h11
  4. [VB6] probleme de redirection d'une commande DOS
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 09h36
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo