Nestjs中Cookie的使用

NestJs中使用Cookie的话我们可以用cookie-parser来实现。 cookie保存在浏览器本地, 正常设置的cookie是不加密的,用户可以自由看到, 用户可以删除cookie,或者禁用它, cookie可以被篡改, cookie可以用于攻击, cookie存储量很小。未来实际上要被localStorage替代,但是后者IE9兼容。

cookie可以用来存储用户信息,存储购物车信息,在实际项目中用的非常多,下面我们给大家讲解一下nestjs中使用Cookie

1、Nestjs中使用Cookie

NestJs中使用Cookie的话我们可以用cookie-parser来实现:https://docs.nestjs.com/techniques/cookies#cookies

1.安装

			
			
cnpm instlal cookie-parser --save 

cnpm i -D @types/cookie-parser --save
			
			
			

2.在main.ts中引入cookie-parser

import * as cookieParser from 'cookie-parser'

3.在main.ts配置中间件

app.use(cookieParser());

4.设置cookie

res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true}); 

//HttpOnly 默认false不允许 客户端脚本访问

5、获取Cookies

@Get('getCookies')    
getCookies(@Request() req){
	return req.cookies.name;
}
			

2、Nestjs中Cookie中的一些参数

			
  domain: 域名
  expires: 过期时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT
  maxAge: 最大失效时间(毫秒),设置在多少后失效
  secure: 当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效
  path: 表示 cookie 影响到的路,如 path=/。如果路径不能匹配时,浏览器则不发送这个Cookie
  httpOnly:是微软对COOKIE做的扩展。如果在COOKIE中设置了“httpOnly”属性,则通过程序(JS脚本、applet等)将无法读取到COOKIE信息,防止XSS攻击产生
  signed:表示是否签名cookie, 设为true 会对这个cookie 签名,这样就需要用res.signedCookies而不是res.cookies访问它。被篡改的签名cookie 会被服务器拒绝,并且cookie 值会重置为它的原始值

		
设置cookie
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })
res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true });
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
获取cookie
req.cookies.name
删除cookie
res.cookie('rememberme', '', { expires: new Date(0)});
res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});

3、Nestjs中配置中文Cookie,以及Cookie加密

1.配置中间件的时候需要传参

app.use(cookieParser('123456'));

2.设置cookie的时候配置signed属性

res.cookie('userinfo','hahaha',{domain:'.ccc.com',maxAge:900000,httpOnly:true,signed:true});

3. signedCookies调用设置的cookie

console.log(req.signedCookies);