2016-04-13 7 views
0

У меня есть приложение, где я пытаюсь зашифровать userID перед отправкой его на клиентскую сторону. Причиной этого является, потому что я использую EJS как заманчивым двигатель, который означает, что у меня есть код, где я использую userID так:Расшифровать данные в узле/express.js Маршрут

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

Проблема с этим состоит в том, что когда кто-то «инспектировать элемент» на в любом браузере они могут видеть их userID. См изображение ниже, например:

enter image description here

Чтобы устранить эту проблему, я начал шифрованной мой userID, прежде чем я послал к клиенту, как 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 
    }); 
}); 

Это успешно шифрует идентификатор, как вы можно увидеть на изображениях ниже:

enter image description here

выпуска:

Проблема в том, что я могу успешно Расшифровать идентификатор, но даже после того, как расшифрованный это я не могу получить данные из базы данных. Я попробовал копировать, вставляя дешифрованный идентификатор в свой маршрут и получаю данные успешно. Как будто он не считывает дешифрованный идентификатор из переменной, но работает, когда копирует его сам.

Heres код:

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"}); 
      }  
     }); 
     }); 

Вещь отметить, что переменная x содержит расшифрованный ID является текстовой форме!

Просто для получения дополнительной информации здесь мои шифрованной & дешифрования функции:

//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; 
} 

Выходной сигнал Расшифровать Функция:

enter image description here

ответ

0

Нашли проблему, проблема заключалась в том, что я был будучи идиотом.

Все, что я должен был сделать, чтобы работа была изменить следующую строку из этого:

Posts.findOne({userID:x}) 

в

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

выше решить эту проблему.

Смежные вопросы