Node / Express API,使用JWT令牌的电子邮件validation,意外的行为

一种奇怪的问题。 我正在构build一个NodeJS /快速API使用JSON Web令牌用户的电子邮件validation。 下面是用户注册和电子邮件确认路线的代码。 使用以下步骤在Postman中testing这些路由时,一切正常(状态200,用户对象返回):1.发送POST请求以创build用户。 2.使用mongodb shell从新用户获取令牌。 3.在获取请求中使用复制/粘贴令牌来确认路线。

然而,当实际点击通过电子邮件发送的链接时,数据库中的所有更新都是按照它的意思进行的,但是我得到了一个401错误。 即使从电子邮件中的链接复制并粘贴令牌并将其发送给邮递员也具有相同的结果。

路线:

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)的整个代码中唯一的地方,所以我知道它是从哪里来的,但不明白为什么它只发生在使用电子邮件中的令牌或全部如果数据库确实是401,那么数据库操作仍然是成功的。当在邮递员中使用修改或不存在的JWT令牌强制执行401错误时,数据库操作从不会执行。

有任何想法吗?

好吧,在厌倦之后,我决定继续实施并无意中find解决scheme。 当我切换到HTML而不是文本呈现电子邮件时,电子邮件客户端不再导致令牌链接被遵循。