为什么我在使用中间件时获得未定义的令牌?

时间:2017-12-18 14:00:38

标签: javascript node.js express jwt middleware

我正在使用nodejs和express来开发一个使用android作为前端的小应用程序。我想实现我正在使用Json-Web Tokens的会话令牌。

我为中间件定义了一个单独的路由来检查用户是否已获得授权。

router.use(function(req,res,next)
{
    // check header or url parameters or post parameters for token
    var token = req.body.token || req.query.token || req.headers['xtoken'];

    if (token)
    {
        // verifies secret and checks exp
        jwt.verify(token,"SECRET-KEY", function(err, decoded) 
        {      
            if (err)
            {
                return res.json({ success: false, message: 'Failed to authenticate token.' });    
            } 
            else
            {
                console.log("Successful token is ",decoded.token)
                req.decoded = decoded;    
                next();
            }
        });
    } 
    else 
    {
        return res.status(403).send(
        { 
            success: false  
        });
    }
});

我需要一个单独的路径来读取由一些数据和多个文件组成的表单。表单详细信息发布到/ user / new-order,请求在上述路由中单独发送到新路由/用户/文件/上传,其中每个文件逐个上载

这是问题所在。 我想在每条路线上读取会话令牌。当我第一次发出POST一些表单数据的请求时,中间件读取会话令牌并接受表单字段但是当它转到上传单个文件的路由时,令牌未定义,我被阻止访问该页面。 / p>

我已经尝试在路由/用户/文件/上传中记录会话令牌的值,而中间件将会话令牌存储为未定义,路由用户/文件/上传能够读取令牌。

Android前端使用单个屏幕接受表单和文件上传。 用户/新订单路线如下:

router.post('/new-order',function(req,res)
{   
    var subject = req.body.subject;
    var Format = req.body.Format;       //Reference FORMAT or FORMATS ?
    var email = req.email
    var token = req.body.token
    console.log("Form token is ",token)       
}); 

用户/上传/文件路由如下:

router.post('/upload/file',uploadtype,function(req,res)
{
    var file = req.file 
    var token = req.body.token
    console.log("File token is ",token)         

});

读取会话数据的中间件位于分配路径之上。

app.use('/user',session)
app.use('/user',assignment)

这是输出:

成功的令牌是:token_value

表单令牌为:token_value

成功的令牌是:未定义

文件令牌为:token_value

我不确定我做错了什么,我真的很感激一些提示和指示。

如果我提供的内容不够,请告诉我,我会立即添加。

非常感谢。

0 个答案:

没有答案