2016-04-13 3 views
0

Ich habe eine App, wo ich versuche, die userID zu verschlüsseln, bevor Sie es an die Client-Seite senden. Der Grund dafür ist, weil ich EJS bin mit als verlockend Motor, der bedeutet, dass ich Code, wo ich die userID wie so bin mit:Entschlüsseln von Daten innerhalb eines Knotens/express.js Route

<body ng-init="getAllPosts('<%= user._id' %>)"></body> 

Das Problem dabei ist, dass, wenn jemand tut „Element untersuchen“ auf jeden Browser können sie deutlich ihre userID sehen. Siehe Bild unten zum Beispiel:

enter image description here

um dieses Problem zu beheben, begann ich meinen Encrypting userID, bevor ich an den Client gesendet, wie s0:

app.get('/profile',isLoggedIn,function(req, res) { 

    var user = req.user; 
    var uid = encrypt(JSON.stringify(user._id)); 

    res.render('profile.ejs', { 
     userID: uid 
    }); 
}); 

Dies die ID Verschlüsselt erfolgreich, wie Sie sehen im Bild unten:

enter image description here

Das Problem:

Das Problem ist, dass ich erfolgreich die ID entschlüsseln kann aber auch sie nach entschlüsselt Ich kann die Daten aus der Datenbank nicht erhalten. Ich habe versucht, die entschlüsselte ID in meine Route einzufügen und die Daten werden erfolgreich übertragen. Es ist wie es liest nicht die entschlüsselte ID aus der Variablen, aber funktioniert, wenn Sie es selbst kopieren.

Heres der Code:

app.get('/user/posts/:id', isLoggedIn, function(req, res){ 

     var x = decrypt(req.params.id) 

     Posts.findOne({userID:x}, function(err, post){ 
      if(err) 
       console.log(err); 
      else if(post){ 
       res.json(post); 
      } else if(!post){ 
       res.json({message: "No Posts document exists for this user"}); 
      }  
     }); 
     }); 

, was zu beachten ist, dass die Variable x entschlüsselte ID enthält, ist Textform!

Gerade für weitere Informationen hier sind meine Encrypting & Decrypting Funktionen:

//Encrypt Data 
function encrypt(text){ 

    var cipher = crypto.createCipher(algorithm,key) 
    var crypted = cipher.update(text, 'utf8', 'base64') 
    crypted += cipher.final('base64'); 

    console.log("CRYPTED " + crypted); 
    return crypted; 
} 

//Decrypt Data 
function decrypt(text){ 

var decipher = crypto.createDecipher(algorithm,key) 
var dec = decipher.update(text, 'base64', 'utf8') 
dec += decipher.final('utf8'); 

console.log("DECRYPTED " + dec); 
return dec; 
} 

Ausgabe von Decrypt Funktion:

enter image description here

Antwort

0

das Problem gefunden, das Problem war, dass ich ein Idiot sein.

Alles, was ich zu machen zu tun hatte, ist Arbeit die folgende Zeile aus, dies zu ändern war:

Posts.findOne({userID:x}) 

zu

Posts.findOne({userID: JSON.parse(x)}) 

Die oben löste das Problem.

Verwandte Themen