express + session 完成登陆注册时用到的依赖讲解

依赖 :‘cookie-parser’、‘express-session’、connect-redis、‘bycrypt’

一.cookie-parser ( Express的中间件,用来实现cookie的解析 )

       cookie-parser是将cookie的值由字符串解析成对象的中间件,可以使用req.cookies查看cookies的值,
       如req.cookies.name。 req.cookies这个属性是一个对象,包含请求发送的cookies。如果请求没有带
       cookies, 那么其值为{}。
      var cookieParser = require('cookie-parser' ) 

cookieParser(secret, options)

 Secret:  可以用string 或是 array 来签名cookie;默认无。
 Options: 第一部分中cookie的可选对象;

     var cookieParser = require('cookie-parser');
     app.use(cookieParser(String));

app.use()相当于每一次请求带上cookieParser(),初始化cookieParser,传入String 作为secreat的密匙加在cookie上类似于加密盐的作用,避免直观暴露在页面上。
**注:**传入签名和不传入签名的cookie获取方式不同

// 不采用签名形式获取cookie的方法
app.use(cookieParser());
res.cookie('bwf', '1234');  //设置cookie
res.send("欢迎第一次访问");   
console.log(req.cookies);

// 使用签名获取cookie 
app.use(cookieParser('singedMyCookie'));
res.cookie("bwf", "hhw", {signed: true});   // 创建加密cookie
res.send("欢迎第一次访问");
//(采用签名形式获取cookie的方法
console.log(req.signedCookies)

注:即使在创建cookieParser时(传入了secret字符串) , cookie也不会自动加密, 需要使用res.cookie(name, value , {singed: true}) 去创建加密的cookie, 以及使用req.signedCookies来获取解密后的cookie

二.Bcryptjs(避免数据库中数据泄露加密存进去的字符串)

我采用的异步加密,还有很多种方式不一一列举

hash加密

var bcrypt = require('bcryptjs');
// 设置加密程度
var salt = bcrypt.genSaltSync(10);
// value为加密的值
bcrypt.hash('value',salt,(err,verify) => {
      if(err){
          return
        }
        // verifyValue为加密好的字符串可以存进数据库
      return verifyValue
})

hash验证取出的加密值

// 第一个参数为传入的值,第二个是hash加密的值
bcrypt.compare("value", verifyValue, (err, rt) => {
    if (err) {
        console.log(err)
    }
    // rt为true or false
    console.log(rt)
})

三.connect-redis

这是一个关于session的持久化插件, 配合 express-session使用。此模块基于redis,将session相关信息持久化。根据express的文档,我们只要实现其所要求的部分方法即可。

var session = require("express-session");
var RedisStore = require('connect-redis')(session);  
var cookieParser = require('cookie-parser');

注: session放置在RedisStore前传参将session存入Redis,不然会异常

四.express-session

session参数

 var session = require("express-session");
 app.use(session(option))

secret:一个String类型的字符串,作为服务器端生成session的签名,若配置了cookiePaeser(secreat)要一致,不然可能出问题
name:返回客户端的key的名称,默认为connect.sid,也可以自己设置。
resave:是指每次请求都重新设置 session cookie,假设你的 cookie 是 10 分钟过期,每次请求都会再设置 10 分钟。默认为true。
saveUninitialized:是指无论有没有 session cookie ,每次请求都设置个 session cookie ,默认给个标示为 connect.sid。
**cconsion ID cookie 的设置对象,设置返回到前端key的属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
store: 存储session(文本文件、redis等)

// session相关配置
    app.use(session({
    secret: config.pass_secret,         // cookie-parser 的 secret 不一致时,可能出问题
    store: new RedisStore(config.redis),
    saveUninitialized: false,
    resave: false,     //指每次请求都重新设置 session cookie,假设你的 cookie 是 10 分钟过期,每次请求都会再设置 10 分钟。默认为true。                   
    cookie: {
        httpOnly: false,
        // expires: false,                    
        maxAge: 10 * 60 * 10000,
    },
}));
以上是配置session的常用参数,一般情况下session与redis结合,即将session存入redis中,在option中配置cookie的参数,默认{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
发布了14 篇原创文章 · 获赞 4 · 访问量 268

猜你喜欢

转载自blog.csdn.net/nodeDocker/article/details/99683447