next() 中间件不适用于令牌身份验证

next() middleware not working with token authentication

我正在使用电子邮件身份验证进行帐户注册,我在 URL 上发送令牌,然后我使用 useParams 从 URL 获取令牌并将其传递到后端以最后验证用户的帐户。

问题是在后端的身份验证中间件上,next() 回调没有继续处理。

中间件 resolves/decodes 令牌 成功 (因为它显示了存储在其中的用户 ID),当调用 next() 时,一切都停止了,不是吗?不要给出任何错误,什么都没有。当我发出 GET 请求时会发生这种情况,如果我发出 POST 请求它 returns 令牌无效,这是不正确的。

前端请求:

const Confirmation = () => {
    const [popMessage, setPopMessage] = useState('');

    let params = useParams("/confirm/:token");
    const {token} = params;

    const confirmAcc = async () =>{
        try {
            const config = {
                headers:{
                    'x-auth-token': token,
                }
            }
            await axios.get('/api/auth/confirm/', config)
            .catch(err=>{
                console.error(err.response);
            })
            setPopMessage('Your account has been confirmed');
        //    setTimeout(() => { window.location.href = '/login';}, 3500);
        } catch (err) {
            console.log(err.response.data);
            return;
        }
    }

后端路由:

router.get('/confirm/', auth, async (req, res) => {
    console.log('Im here!!')
    try {
        console.log('Im here too!!')
        const user = await User.findById(req.user.id).select('-password');
        console.log('user', user)
        await user.update({ confirmed: true });
        sendEmail(user.email, user.name, "welcome");
    } catch (err) {
      res.status(401).send('your email token is invalid');
      return;
    }
});

中间件'auth':

module.exports = function(req, res, next) {
    const token = req.header('x-auth-token');
    if (!token) {
        return res.status(401).send('No token, authorization denied ');
    }
    try {
        const decoded = jwt.verify(token, config.get('jwtSecret'));
        console.log('decoded:', decoded)
        req.user = decoded.user;
        next();
    } catch(err) {
        res.status(401).send('Token is not valid');
    }
}

最奇怪的事情:它只发生在这个路由器上,应用程序的其余部分使用完全相同的代码工作正常。如果有人能分享任何想法,我将不胜感激。

提前致谢!

问题是请求的类型:我更改为 PUT 请求并在请求上发送了一个空主体。这修复了它,这里是代码:

const Confirmation = () => {
    const [popMessage, setPopMessage] = useState('');

    let params = useParams("/confirm/:token");
    const {token} = params;

    const confirmAcc = async () =>{
        try {
            const config = {
                headers:{
                    'x-auth-token': token,
                }
            }
           // here, empty body and PUT req.
            const body = null
            axios.put('/api/auth/confirm/',body, config)
            .catch(err=>{
                console.error(err.response);
            });
            setPopMessage('Your account has been confirmed');
            setTimeout(() => { window.location.href = '/login';}, 3500);
        } catch (err) {
            console.log(err.response.data);
            return;
        }
      };