【问题标题】:express middleware with regards to the logic of a server关于服务器逻辑的表达中间件
【发布时间】:2018-08-31 09:02:12
【问题描述】:

我正在学习如何使用身份验证构建服务器。我在关注这个tutorial,最终代码可以在here找到。它使用ExpressJWT 来构建一个简单的登录服务器。以下代码:

app.use((req, res, next)=>{
        // check header or url parameters or post parameters for token
        console.log(req.body);
        var token = req.body.token || req.query.token || req.headers['x-access-token'];
        if(token){
          console.log("token");
          jwt.verify(token,"samplesecret",(err,decod)=>{
            if(err){
              res.status(403).json({
                message:"Wrong Token"
              });
            }
            else{
              console.log("success");
              req.decoded=decod;
              next();
            }
          });
        }
        else{
          res.status(403).json({
            message:"No Token"
          });
        }
});

正在添加一个中间件,但我不确定这样做的目的是什么以及它是如何工作的。这是否在每条路线上都被调用?在这种情况下,req.body 是什么? res.status().json() 是做什么的?


我也不明白 HTML 文件下的脚本 authgetlist 的作用(太长,无法包含)。什么时候调用这些脚本?他们是否在用户的计算机上存储了cookie?正在验证什么?


这是很多问题,我很抱歉。我对网络开发很陌生,只是想弄清楚基础知识。非常感谢。

【问题讨论】:

    标签: node.js express authentication jwt


    【解决方案1】:

    在每条路由上都会调用它来检查令牌是否存在、解码并检查它。

    如果存在并已解码(其中显示为 console.log('success');),它将将从 jwt 解码的数据附加到请求 req 以便在您处理请求的任何控制器中,您都可以拥有数据(存储在req.decoded)


    至于res.status().json()res当然是回复的意思)... 正在链接 2 个函数,它们是 res 的函数。

    • status(int)
    • json(obj)

    req.status 设置响应状态码(例如 200 OK、404 Not found、503 Server error)。 req.json 发送响应,正文是您传入的 json。

    因此,以下内容会将消息 {error:'We failed'} 发送回客户端,http 状态代码为 503:

    req.status(503).json({ error: 'We failed' });
    

    您可以在 Express 文档 here 上阅读有关此类响应方法/属性的更多信息(以及其他类似 sendredirect 等)。

    【讨论】:

    • 假设我要在某些路由上使用它(b/c 并非所有路由都需要身份验证),我该如何检查状态码是否失败?我想如果成功通过身份验证,我可以调用req.body.decoded,如果没有,req.body.decoded 将不存在,对吧?那么做所有其他工作并发送状态码的目的是什么?好像没必要?
    • 是的,你是对的 request.body.decode 将不存在,但你需要从你发出请求的地方告诉你前端,它需要知道请求是否成功, 状态码告诉您请求的状态,据此您可以向用户显示正确的错误消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2012-01-19
    • 2012-01-18
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多