2016-04-29 7 views
1

私は自分のカスタムパスワードリセットを実装しています。これは、ユーザーが自分のパスワードをリセットするページに移動したときに電子メールを送信します。ノードjs - http get要求からのトークンをHTMLページに安全に渡す方法は?

これまでは、http取得リクエストリンクに入れられ、ユーザーに電子メールで送信される固有のトークンを生成しました。

//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は、次いで、トークンが存在する場合、検証解析クラウドコード機能を実行し、ユーザがリンク(例えばmywebsite.com/verifypasswordreset?id=96rZyAWLTu

Iがトークンを取得明示ルートを持っているがクリック

そうであれば、パスワードをリセットするためのフォームを含むhtmlを送信して応答します。 (resetpassword.html

この時点でresetpassword.htmlページのURLはまだ、しかし、それに埋め込まれたトークン(mywebsite.com/verifypasswordreset?id=96rZyAWLTu)を持っているとすぐに、ユーザーがフォームを送信すると、それは、HTTPポストを行い、新しいパスワードをポスト、中に後ろのトークンを残しますリンクと私はどのトークンがパスワードリセットに関連付けられているかわからない?ユーザーが自分のパスワードを変更するフォームを送信

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

、何とか現在のURL(mywebsite.com/verifypasswordreset?id=96rZyAWLTu)からトークンを取得し、HTTP POSTリクエストに含めることができますどのように私のノードのjsアプリはそれを読んで知っていることができましたトークンはパスワードリセットに関連付けられていますか?

また、トークンのトラッキングをより安全に行うには、より良い方法がありますか?&

* httpを使用していることを無視してください。私はSSL証明書を購入し、起動する前にhttpsを使用します。

答えて

1

単にresetpassword.htmlページを送信しているときに、トークンの検証のポイントが表示されません。しかし、実際にユーザのパスワードを更新するときには、トークンを検証しなければならない(MUST)。だから、ここで少し変更したワークフローです:

ユーザーは、リンク(例mywebsite.com/passwordreset?id=96rZyAWLTu)クリック

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

あなたのResetPasswordのページのURLは、まだ組み込まれたトークンを持っています。これで、ユーザーはフォームを送信し、http投稿を行い、新しいパスワードを投稿します。

app.post('/passwordreset', function(req, res) { 
Parse.Cloud.run('verifyPasswordReset', { token: req.param("id") }, { 
    success: function(user) { 
      //update user's password here 
      res.send('You sent the password "' + req.body.password + '".'); 
    }, 
    error: function(error) { 
     res.sendFile(path.join(__dirname + '/website/error.html')); 
    } 
}); 
+0

これはユーザーが私がトークンを持っていないフォームを送信した後も問題は解決しません。私はちょうど 'req.param(" id ")'にアクセスしようとしましたが、ユーザーがポストリクエストをしたときに 'undefined'が返ってきましたか?どのようにしてトークンを渡すことができますか? – Josh

+0

トークンの完全なURLがブラウザに表示されますか?もしそうなら、フロントエンドコードを共有できますか? –

+1

がある場合は、明らかに動作しません。 タグを使用するか、空の操作をしてください。 –

関連する問題