快速 Cookie 解析器-已签名和未签名 Cookie
原文:https://www . geesforgeks . org/express-cookie-parser-signed-and-unsigned-cookies/
cookie 是随请求发送到客户端的一段数据,由用户当前使用的网络浏览器存储在客户端。借助cookie-
- 网站很容易记住用户的信息
- 很容易捕捉用户的浏览历史
- 它在存储用户会话时也很有用
会话使用秘密标识向所有服务器发出请求。信息存储在链接到此机密标识的服务器上。 为了在我们的应用程序中使用 cookie,使用了 cookie 解析器中间件。要安装它,请编写以下命令–
npm install cookie-parser@latest --save
另外,要安装快速中间件,请编写以下命令–
npm install express@latest --save
这些命令将安装最新版本的 cookie-parser 和 express。 Cookie 解析器中间件用于解析客户端向服务器发出的请求所附带的 Cookie。因此,为了使用 cookie 解析器,我们将在 JavaScript 文件中编写以下代码行——
const cookieParser = require('cookie-parser');
const express = require('express')
const app = express();
app.use(cookieParser());
让我们看一个如何设置新 cookie 的例子。创建一个名为“index.js”的新文件。要为 cookie 设置和分配名称,请遵循以下代码–
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.get('/', (req, res) => {
res.cookie('name', 'GeeksForGeeks').send('Cookie-Parser');
});
app.listen(3000, (err) => {
if(err){ console.log(err) }
else { console.log('Success!!') }
});
在这里,我们将 cookie 发送到新的路由,并将 cookie 的名称设置为“GeeksForGeeks”。在最后一段代码中,我们的服务器正在监听带有回调函数的端口 3000。如果出现错误,回调函数将返回错误,否则将返回“成功”。 现在,使用命令运行以下代码–
node index.js
要检查是否设置了 cookie,只需在成功设置服务器后转到这个链接。打开控制台,将命令写成–
document.cookie
您将获得如下输出–
"name=GeeksForGeeks"
此外, cookie 解析器中间件用发送到服务器的名称填充 req.cookies 。在这里,在我们的例子中,我们可以在我们的路由中添加以下代码行–
console.log(req.cookies)
上一行的输出将是–
{ name: 'GeeksForGeeks' }
cookie 解析器的方法
-
cookieParser(secret, options)
–该中间件采用两个参数。第一个是秘密身份证,另一个是选项。秘密标识可以是字符串或字符串数组。如果没有提供秘密参数,那么它将把 cookie 作为未签名的 cookie 。因此,提供秘密标识是可选的。第二个参数将是一个对象,指定对 cookies 采取什么操作。例如,解码是一个解码 cookie 值的函数。
-
cookieParser.JSONCookie(str)
–该方法将把 cookie 的值解析为 JSON cookie。如果提供的 cookie 是 JSON cookie,它将返回解析后的 JSON 值。如果不是 JSON cookie,它将返回传递的值本身。
-
cookieParser.JSONCookies(cookies)
–提供一个附加了标识的对象。该方法将遍历提供的对象标识,并对每个值调用“JSONCookie”。它将用解析后的值替换原始值。这将返回传入的同一对象。
-
cookieParser.signedCookie(string, secret)
–此方法将 cookie 解析为签名 cookie。如果 cookie 是已签名的 cookie,并且签名可以被验证,那么它将返回已解析的未签名值。如果 cookie 是无符号的,则返回原始值。如果 cookie 已签名,但签名无法验证,则返回 false 。 现在,我们的第二个论点秘密可以是一串或一串数组。如果是字符串,那么它将被用作秘密。如果它是一个数组,那么将对数组的每个元素进行迭代,并使用每个秘密对 cookie 进行无符号处理。
-
cookieParser.signedCookies(cookies, secret)
–此方法将对每个标识执行迭代,并检查是否有任何标识是签名 cookie。如果它被签名并且签名可以被验证,那么 ID 将被从对象中删除,它将被添加到新的返回对象中。
根据客户端发送的 cookie 的类型,将自动调用这些方法。
已签名和未签名 Cookie 的实现
未签名的 Cookie
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.get('/', (req, res) => {
res.cookie('name', 'GeeksForGeeks').send();
console.log(req.cookies);
});
app.listen(3000, (err) => {
if(err){ console.log(err) }
else { console.log('Success!!') }
});
上述代码的输出将是–
"name=GeeksForGeeks"
签名 Cookie
var express = require('express')
var cookieParser = require('cookie-parser')
var app = express()
app.use(cookieParser('GFG'))
app.get('/', function (req, res) {
res.cookie('name', 'GeeksForGeeks', { signed: true }).send();
console.log(req.signedCookies)
})
app.listen(3000, (err) => {
if(err) { console.log(err) }
else { console.log('Success') }
})
这里,在第 4 行—“GFG”是作为 cookie 的秘密值提供的。 在第 7 行–cookie 的名称设置为“GeeksForGeeks”,签名的对象设置为 true。 上述代码的输出将是–
{ name: 'GeeksForGeeks' }
版权属于:月萌API www.moonapi.com,转载请注明出处