📜  如何使用 Node.js 在 GET 方法中检查用户身份验证?

📅  最后修改于: 2022-05-13 01:56:32.512000             🧑  作者: Mango

如何使用 Node.js 在 GET 方法中检查用户身份验证?

有很多身份验证方法,例如 Web 令牌身份验证、基于 cookie 的身份验证等等。在本文中,我们将讨论在处理客户端在 node.js 中获取请求时使用 express.js 的最简单的身份验证方法之一。 HTTP 标头。  

方法: HTTP 协议使用各种类型的标头进行身份验证客户端我们将使用 WWW-Authenticate 标头。 HTTP WWW-Authenticate 标头是一个响应型标头,它支持各种身份验证机制,这些机制对于控制对页面和其他资源的访问也很重要。

认证说明:

当客户端的请求头不包含 WWW-Authenticate 头服务器响应头集时
标头是 res.setHeader(“WWW-Authenticate”, 'Basic') 并设置状态码 401 之后,会弹出一个
出现在客户端进行有效的身份验证。

认证表格:

模块安装:使用以下命令安装 express 模块。

npm install express

项目结构:

index.js
// Importing required modules
const { response } = require("express");
const express = require("express");
const app=express()
  
// Handling get request from the client side
app.get("/",(req,res,next)=>{
  
     // Checking the header of the authorization
    var authheader=req.headers.authorization;
    console.log(authheader)
    if(!authheader){
        
        var err=new Error("You are not authenticated")
        // Set the header for the response
        res.setHeader("WWW-Authenticate",'Basic')
        err.status=401
        return next(err)
    
    }
    console.log(authheader)
  
    // Decrypt the user name and the password
    var auth = new Buffer.from(authheader.split(' ')[1],
    'base64').toString().split(':');
    var user = auth[0];
    var pass = auth[1];
  
    // Checking the details
    if (user == 'admin' && pass == 'password') {
      res.send("Welcome you are authorized")
    } else {
        var err = new Error('You are not authenticated!');
        res.setHeader('WWW-Authenticate', 'Basic');
        err.status = 401;
        return next(err);
    }
  
})
app.listen(3000,()=>{
  console.log("Server is starting")
})


使用以下命令运行index.js

node index.js

输出:

  • 在私人窗口中打开任何具有http://localhost:3000位置的浏览器(以避免保存密码和用户名)。地址栏附近会弹出一个弹窗。填写代码中提到的用户名和密码。
  • 如果输入的用户名和密码与提及匹配,则位置index.html将呈现在浏览器上。

说明:第一个中间件用于在服务器启动和客户端输入本地主机地址时检查客户端的身份验证。最初req.headers.authorization未定义,next() 回调函数返回 401 状态码未经授权访问浏览器。客户端填写凭证,凭证以 base64 格式加密。然后解密包含用户名和密码的base64格式数据,然后在检查用户名和密码正确后,next()方法调用认证中间件下面提到的下一个中间件,否则认证表单一次又一次弹出.

请求标头详细信息: