2016-04-29 3 views
1

Ich arbeite an der Implementierung meines eigenen benutzerdefinierten Kennwortzurücksetzens, das eine E-Mail sendet, in der der Benutzer eine Seite aufruft, um sein Kennwort zurückzusetzen.node js - Wie sicher Token von http get Anfrage an HTML-Seite übergeben?

Bis jetzt habe ich ein eindeutiges Token erzeugt, das in einen HTTP get request-Link gesetzt und an den Benutzer per E-Mail gesendet wird.

Wenn der Benutzer den Link (Beispiel mywebsite.com/verifypasswordreset?id=96rZyAWLTu)

Ich habe eine Schnellstraße klickt, die das Token erhält:

//Verify Password Reset 
app.get('/verifypasswordreset', function(req, res) { 
    Parse.Cloud.run('verifyPasswordReset', { token: req.param("id") }, { 
     success: function(user) { 
      res.sendFile(path.join(__dirname + '/website/resetpassword.html')); 
     }, 
     error: function(error) { 
      res.sendFile(path.join(__dirname + '/website/404.html')); 
     } 
    }); 
}); 

I dann führt eine Parse Cloud-Code-Funktion, die das Token validiert, wenn vorhanden ist, und Wenn dies der Fall ist, sendet das HTML, das ein Formular zum Zurücksetzen des Passworts enthält. (resetpassword.html)

an dieser Stelle resetpassword.html URL der Seite hat immer noch das Token darin eingebettet (mywebsite.com/verifypasswordreset?id=96rZyAWLTu) aber sobald der Benutzer das Formular abschickt, es macht einen http Post und Beiträge das neue Passwort, das Token Zurücklassung in der Link und damit weiß ich nicht, welches Token mit dem Zurücksetzen des Passworts verbunden ist?

//Reset Password 
app.post('/resetpassword', function(req, res) { 
    res.send('You sent the password "' + req.body.password + '".'); 
}); 

Wenn der Benutzer das Formular sendet ihr Kennwort zu ändern, wie irgendwie das Token aus der aktuellen URL bekommen (mywebsite.com/verifypasswordreset?id=96rZyAWLTu) und schließen sie in der HTTP-POST-Anfrage app meinen Knoten js es lesen kann und weiß, welche Token ist mit dem Zurücksetzen des Passworts verbunden?

Oder ist alternativ eine bessere & sicherer Weg, um den Token zu verfolgen?

* Hinweis ignorieren, dass ich http verwende Ich werde ein SSL-Zertifikat kaufen und https vor dem Start verwenden.

Antwort

1

Ich sehe nicht den Sinn der Validierung des Tokens, wenn Sie einfach eine resetpassword.html Seite senden. Das Token MUSS jedoch überprüft werden, wenn das Passwort für einen Benutzer tatsächlich aktualisiert wird. So, hier ist eine leicht modifizierte Workflow:

Benutzer klickt auf den Link (Beispiel mywebsite.com/passwordreset?id=96rZyAWLTu)

app.get('/passwordreset', function(req, res) { 
     res.sendFile(path.join(__dirname + '/website/resetpassword.html')); 
}); 

Ihre Resetpassword-Seiten-URL hat immer noch das Token eingebettet. Jetzt sendet der Benutzer das Formular, macht einen http-Post und veröffentlicht das neue Passwort.

+0

Dies löst nicht das Problem, nachdem der Benutzer das Formular übermittelt, ich habe das Token nicht mehr. Ich habe gerade versucht, auf 'req.param (" id ")' zuzugreifen, wenn der Benutzer die Post-Anfrage macht, aber es gibt 'undefined' zurück? Wie kann ich das Token übergeben? – Josh

+0

Wird die vollständige URL mit dem Token im Browser angezeigt? Wenn ja, können Sie Ihren Frontend-Code teilen? –

+1

Wenn Sie

haben, wird das offensichtlich nicht funktionieren. Verwenden Sie einfach das Tag oder haben Sie eine leere Aktion. –