2016-04-30 11 views
0

Ich versuche, die Verschlüsselungsfunktion unten genannten nennen:Nicht in der Lage einen String mit einem öffentlichen Schlüssel in Protractor zu verschlüsseln

I
var encryptor = require("./jsencrypt.js"); 
this.encrypt = function() { 
    var key="LxVtiqZV6g2D493gDBfG0BfV6sAhteG6hOCAu48qO00Z99OpiaIG5vZxVtiqZV8C7bpwIDAQAB"; 
    encryptor = new JSEncrypt(); 
    encryptor.setPublicKey(key); 
    var newString = encryptor.encrypt('Password'); 
    console.log("Encrypted password =",newString); 
} 

Zunächst wurde nicht definiert JSEncrypt Referenz Fehler. So habe ich jsencrypt.js Datei heruntergeladen und am Anfang var encryptor = require("./jsencrypt.js"); hinzugefügt.

Jetzt bekomme ich Fehler folgende:

Message: 
ReferenceError: navigator is not defined 
Stacktrace: 
ReferenceError: navigator is not defined 
at e:\Praveen Data\Projects\ECP\CentralRegistryUI\TestScripts\Utils\jsencrypt.js:73:13 
at Object.<anonymous> (e:\Praveen Data\Projects\ECP\CentralRegistryUI\TestScripts\Utils\jsencrypt.js:4342:3) 
at require (module.js:385:17) 

mit windows.navigator in jsencrypt.js versucht, aber hat nicht funktioniert.

Antwort

1

Einer meiner Kollegen half mir bei der Lösung. Also hier habe ich eine Funktion zur Verschlüsselung:

export default class Encryptor { 

    constructor($window, $http) { 
    'ngInject'; 
    this.encryptor = new $window.JSEncrypt(); 
    //Need to use HTTP here instead of resource since the resource does not return plain text. 
    //Getting Public Key by hitting a rest uri. 
    $http({method: "GET", url: "/xyz/authenticate"}).success((item) => { 
     this.encryptor.setPublicKey(item); 
     //set the current encryptor on the window so that testing can use it 
     $window.loginEncryptor = this.encryptor; 
    }); 
    } 

    encryptPassword(credentials) { 
    credentials.password = this.encryptor.encrypt(credentials.password); 
    } 

} 

Hoffnung diese Hilfe andere:

this.initializeEncryptedPassword =() => { 
    //console.log("before calling encrypt... "); 
    browser.executeScript(() => { 
     //console.log("Starting to return encryptor..."); 
     return window.loginEncryptor.encrypt(window.loginPassword); 
    }).then((encryptedPassword) => { 
     this.encryptedPassword = encryptedPassword; 
    }); 
    //console.log("after calling encrypt..."); 
} 

Diese Funktion wird durch aufgerufen wird.

1

Winkelmessertests werden nicht in der Browserumgebung, sondern in node.js ausgeführt, weil das Navigatorobjekt dort nicht verfügbar ist. JSEncrypt ist darauf angewiesen, auf der Clientseite über verschiedene Browser und Versionen hinweg zu arbeiten.

Es wird an vielen Stellen im JSEncrypt-Code referenziert, also würde ich am ehesten auf eine Server-seitige Verschlüsselungsbibliothek umschalten, die für Sie funktionieren würde oder wenn nicht möglich, ein globales Navigator-JSON-Objekt mit allen erwarteten Eigenschaften/Methoden vorzuspielen Wenn es sich um einen Chrome-Browser handelt - node.js wird auf der js-Engine von Chrome ausgeführt, sollte also gut funktionieren.

+0

Danke Tom. Wie Sie erkannt haben, werde ich versuchen, Global Navigator Json-Objekt und es zum Funktionieren zu bringen. Ich werde diesen Beitrag mit dem Lösungscode aktualisieren, wenn es mir gelingt. – Praveen

+0

viel Glück Praveen :) –