gpt4 book ai didi

javascript - NodeJS 和 ExpressJS 中的多用户密码重置并发问题

转载 作者:行者123 更新时间:2023-11-29 23:59:29 25 4
gpt4 key购买 nike

无法为多个用户重置密码。当多个用户尝试重置密码时我被卡住了

我如何捕获在电子邮件中发送给特定用户的确切重置 token 作为链接?假设当两个用户试图重置密码时,resetQueryParameter 将被覆盖。我该如何处理?

当用户点击电子邮件中的重置链接时从查询参数中获取 token :

// global variable
var resetQueryParameters = '';

//CAPTURE TOKEN (QUERY PARAMS) FROM LINK
app.get('/resetQuery/', function (req, res) {

//SET THE TOKEN TO VARIABLE
resetQueryParameters = req.query.token;
r.db('myDB').table('Reset_Password').filter(r.row('auth_key').eq(req.query.token)).
run(myConnection, function (err, cursor) {
if (err) {
return next(err);
}
cursor.toArray(function (err, result) {
if (err) {
throw err;
} else {
if (result.length > 0) {
res.redirect(redirectResetPage);
} else {
res.redirect(redirectLoginPage);
}
return result;
console.log("printing reset link from db.....", JSON.stringify(result, null, 2));
}
});
});
});

当用户点击链接并验证签名时获取 token :

function resetPassword(req, res, next) {
console.log('reset password called from external link.....');

nJwt.verify(resetQueryParameters, secretKey, function (err, verifiedJwt) {
if (err) {
console.log('reset token not valid...', err);
} else {
var params = {
'username': verifiedJwt.body.details,
'newPassword': req.params.newPassword
};

getApiResponse(resetURL, params, function (res1) {
console.log('sending reset params to server...', params);
if (res1.error) {
console.log('Could not reset password......', res1.error);
} else {
console.log('reset password success.....');
resetQueryParameters = '';
res.json(res1);
}
});
}
});
}

最佳答案

在这里使用全局变量不是一个好习惯,在任何情况下都不是。

当您进行重定向时,您应该将 req.query.token 传递给 redirectResetPage,如下所示,

if (result.length > 0) {
res.redirect(redirectResetPage + '?token=' + req.query.token);
} else {
res.redirect(redirectLoginPage);
}

让页面将相同的 token 传递回 resetPassword 方法,并在 request.queryrequest.body 中使用它但不是来自全局变量。

function resetPassword(req, res, next) {
console.log('reset password called from external link.....');

nJwt.verify(req.query.token, secretKey, function (err, verifiedJwt) {
if (err) {
console.log('reset token not valid...', err);
} else {
var params = {
'username': verifiedJwt.body.details,
'newPassword': req.params.newPassword
};

getApiResponse(resetURL, params, function (res1) {
console.log('sending reset params to server...', params);
if (res1.error) {
console.log('Could not reset password......', res1.error);
} else {
console.log('reset password success.....');
resetQueryParameters = '';
res.json(res1);
}
});
}
});
}

Note: The best practise is, store this token in the database if possible or store it in the cookie/jwt token.

关于javascript - NodeJS 和 ExpressJS 中的多用户密码重置并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40956725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com