gpt4 book ai didi

node.js - Node/Express API,使用 JWT token 的电子邮件验证,意外行为

转载 作者:可可西里 更新时间:2023-11-01 10:48:10 27 4
gpt4 key购买 nike

有点奇怪的问题。我正在构建一个 NodeJS/Express api,使用 json 网络 token 为用户进行电子邮件验证。用户注册和电子邮件确认路线的代码如下。使用以下过程在 Postman 中测试这些路由时,一切正常(状态 200,用户对象返回): 1.发送POST请求创建用户。 2. 使用 mongodb shell 从新用户那里获取 token 。 3. 在确认路由的获取请求中使用复制/粘贴 token 。

但是,当实际单击通过电子邮件发送的链接时,数据库中的所有内容都会按预期更新,但我收到 401 错误。即使从电子邮件中的链接复制和粘贴 token 并在 postman 中发送也有相同的结果。

路线:

app.post('/api/users', (req, res) => {
let body = _.pick(req.body, [
'email', 'password', 'firstName', 'lastName', 'adminRequested'
]);
let user = new User(body);

user.save().then(() => {
return user.generateAuthToken('confirmation', '1h');
}).then((token) => {
let currentUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
let confirmationUrl = currentUrl + `/confirm/${token}`;
mailTransport.sendMail({
from: `Break Board API <${process.env.MAIL_USER}>`,
to: user.email,
subject: 'Your Email Confirmation Link',
text: `Click this link to verify your email: ${confirmationUrl}`
});
res.send(JSON.stringify(user, undefined, 2));
}).catch((e) => {
res.status(400).send(e);
});
});

app.get('/api/users/confirm/:token', confirmToken, (req, res) => {
let token = req.token;
let user = req.user;
req.user.update({
$set: {
emailConfirmed: true
},
$pull: {
tokens: {token}
}
}).then(() => {
res.send(user);
});
});

confirmToken中间件:

let {User} = require('./../models/user');

let confirmToken = (req, res, next) => {
let token = req.params.token;

User.findByToken(token).then((user) => {
if(!user) {
return Promise.reject();
}
req.user = user;
req.token = token;
next();
}).catch((e) => {
res.status(401).send();
});
};

中间件是整个代码中唯一有 res.status(401) 的地方,所以我知道这是它的来源,但不明白为什么它只在使用电子邮件中的 token 时发生,或者如果它确实是 401,则所有 DB 操作仍然成功。当使用修改后的或不存在的 JWT token 在 Postman 中强制出现 401 错误时,永远不会执行 DB 操作。

有什么想法吗?

最佳答案

好吧,受够了之后我决定继续实现并无意中找到了解决方案。当我切换为以 html 而不是文本格式呈现电子邮件时,电子邮件客户端不再导致跟踪 token 链接。

关于node.js - Node/Express API,使用 JWT token 的电子邮件验证,意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47727064/

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