2017-06-28 5 views
0

Wie kann ich die Abfrage-String-Parameter in der URL beim Senden einer E-Mail an den Benutzer mit Link ausblenden und in der Lage sein, gleichzeitig zu lesen, greifen sie, wenn die Seite in den Browser geladen wird?NodeJs und nodemailer - Abfrageparameter im Email-Link und URL ausblenden?

Verwendung: NodeJs, Angular1, MongoDb.

Code:

exports.newPass = function (req, res) { 
User.findOne({ 
    email: req.body.email 
}, function (err, email) { 
    console.log('Email: ' + email); 
    if (err) throw err; 
    if (!email) { 
     console.log('Email: ' + email); 
     return res.json({ message: 'This Email does not exist!' }); 

    } 

    var transport = mailer.createTransport({ 
     host:'localhost', 
     port: 25, 
     secure: false, 
     auth: { 
      user: "userName", 
      pass: "passWord" 
     } 
    }); 

    var mail = { 
     from: "DevOps <[email protected]>", 
     to: "[email protected]", 
     subject: "Set New Password", 
     text: "To set new Password: ", 
     html: '<strong>To set new Password: </strong>' 
      + ' <a href="http://localhost:4000/endPoint#!/signup?m=' 
      + email.email 
      + '&fn=' 
      + email.fullName 
      + '&_id=' 
      + email._id 
      + '">Restore Password</a>' 
    } 

    transport.sendMail(mail, function(error, response){ 
     if(error){ 
      console.log('Server Error: ' + error); 
     }else{ 
      console.log('Message sent: ' + JSON.stringify(response.messageId)); 
     } 
     transport.close(); 
    }); 
    return res.json({ Ok: 'New Password will be send to you... please check your Emails' }); 
}); 
}; 

Ich bin die Lage, dies in dem Winkel Controller zu verwalten, indem Sie die folgenden:

$location.search({}); 

aber die Parameter und die Werte sind immer noch sichtbar in dem E-Mail-Link . Sie verschwinden, nachdem der Benutzer auf den E-Mail-Link klickt und zum Browser geht. Ich möchte sie auch in der E-Mail verstecken, die an den Empfänger gesendet wird.

+0

Warum möchten Sie sie verstecken? – robertklep

Antwort

1

Wenn Sicherheit keine Rolle spielt, können Sie ein Objekt mit den benötigten Daten erstellen, es stringieren und dann in Base 64 codieren. Sie können dieses Objekt einfach in die JSON-Zeichenfolge zurückdecodieren.

Sie würden so etwas in Knoten tun:

var data = { email: email.email, fn: email.fullName, _id: email._id }; 
data = JSON.stringify(data); 
data = Buffer.from(data).toString('base64'); 
var mail = { 
     from: "DevOps <[email protected]>", 
     to: "[email protected]", 
     subject: "Set New Password", 
     text: "To set new Password: ", 
     html: '<strong>To set new Password: </strong>' 
      + ' <a href="http://localhost:4000/endPoint#!/signup?d=' + data + '">Restore Password</a>' 
    } 

Beachten Sie, dass jemand diese wieder entschlüsseln kann.

Je nachdem, wo Sie diese Daten zurück erhalten möchten, müssen Sie verschiedene Möglichkeiten zum Entschlüsseln dieser Daten überprüfen. Es ist ziemlich ähnlich in Knoten:

Buffer.from(b64string, 'base64'); 

Wenn Sie jedoch die Menschen nicht wollen, dass diese in der Lage sein zu entschlüsseln, dann würden Sie einen anderen Ansatz zu nehmen. Was ich tun würde, ist einen zufälligen Hash zu erzeugen und irgendwo in der Datenbank zu speichern, um anzuzeigen, dass er mit einem Benutzer verbunden ist, der eine Passwortänderung wünscht. Sie können diesen Hash dann an den Benutzer senden und nachschlagen, wenn die von Ihnen gesendete URL angefordert wird.

+0

Danke, Ja, Sicherheit ist ein Problem. –

+0

@ k.vincent aktualisiert meine Antwort. – ItsGreg

+0

Danke, ich werde es versuchen –

Verwandte Themen