82 votes

Comment éviter l'ajout du préfixe "unsafe" à un lien par Angular 2 ?

En utilisant Angular 2, existe-t-il un paramètre pour éviter d'ajouter le préfixe " dangereux : " aux liens. J'ai besoin de définir des liens pour un protocole qui n'est pas sur la liste blanche par défaut dans Angular 2, mais il est nécessaire pour notre application interne, donc le résultat est un lien invalide :

    <a href="unsafe:Notes://MYSERVER/C1256D3B004057E8" ..

Dans l'ancien Angular, il y avait compileProvider.aHrefSanitizationWhitelist, mais je ne trouve rien de similaire dans Angular 2.

0 votes

J'avais juste un espace devant mon URI.

170voto

Abdulrahman Points 12886

Utilisez le DomSanitizer :

import {DomSanitizer} from '@angular/platform-browser';
...
constructor(private sanitizer:DomSanitizer){}
...
let sanitizedUrl = this.sanitizer.bypassSecurityTrustUrl('Notes://MYSERVER/C1256D3B004057E8');

ou créez une méthode pour retourner l'url aseptisée :

sanitize(url:string){
    return this.sanitizer.bypassSecurityTrustUrl(url);
}

et ensuite dans votre modèle :

<a [href]="sanitize('Notes://MYSERVER/C1256D3B004057E8')" ..

Démo Plunk

1 votes

Instructions très précises et complètes. Fonctionne parfaitement. Je me demande où vous avez trouvé cela.... :)

0 votes

Actuellement, il se trouve tout en haut de page du journal des modifications d'angular2 . C'est écrit pour assainir le style, mais une fois que vous avez DomSanitizationService le reste est juste une question de ctrl+espace :D

0 votes

Avant de voir votre démo, j'avais du mal à voir que je manquais certaines importations clés : @angular/platform-browser y @angular/platform-browser-dynamic . Il n'y avait pas moyen que mes URLs soient sans unsafe: sur leur front.

46voto

Amruth LS Points 2610

Une autre solution consiste à créer un service pipe pour transformer une URL non sécurisée en une URL sécurisée, ce qui évite de devoir réécrire le code dans tous les composants. Créez un service pipe appelé safe-url.pipe.ts :

import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';

@Pipe({
  name: 'safeUrl'
})
export class SafeUrlPipe implements PipeTransform {
  constructor(private domSanitizer: DomSanitizer) {}
  transform(url) {
    return this.domSanitizer.bypassSecurityTrustResourceUrl(url);
  }
}

Utilisez-le ensuite dans votre vue.

Exemple : <a [href]="'Notes://MYSERVER/C1256D3B004057E8' | safeUrl"></a>

NOTE : N'oubliez pas d'injecter ce service de tuyauterie dans votre système d'information. app.module.ts fichier :

import { SafeUrlPipe } from './shared/safe-url.pipe'; // Make sure your safe-url.pipe.ts file path is matching.

@NgModule({ declarations: [SafeUrlPipe],...});

6 votes

Peut-être faut-il mettre le "href" entre crochets - [href], pour qu'Angular puisse l'exécuter.

0 votes

Qu'est-ce que " nœud " (à la fin) dans ce contexte ? Node.js ? Quelque chose dans Angular ? Quelque chose d'autre ?

0 votes

@PeterMortensen il a peut-être voulu dire "Angular Module". Donc dans votre fichier app.module.ts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X