node --- > 实现session认证.

跨域认证的问题

互联网服务离不开用户认证.一般流程如下:
1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

自己创建 Session

  • 注: session 是后端的内容
  • 具体思路如下:
  1. 使用 session 空对象存 cookie 键值对.
  2. 当第一次进入的时候,生成一个随机数 sid,通过 cookie 传递 sid,并再后端使用session[sid] = msg的方式,记录本次的值
  3. 若非第一次进入,则需要从 cookie 中解析出 sid,进而得到该 sid 下的内容(有可能是用户信息)
const session = {}
http
  .createServer((req, res) => {
    const sessionKey = 'sid'

    if (req.url === '/favicon.ico') {
      return
    } else {
      const cookie = req.headers.cookie
      if (cookie && cookie.indexOf(sessionKey) > -1) {
        res.end('Come Back')
        console.log('cookie:', cookie)
        // 简略写法(未必具有通用性)
        const pattern = new RegExp(`${sessionKey}=([^;]+);?\S*`)
        const sid = pattern.exec(cookie)[1]
        console.log('session:', sid, session, session[sid])
      } else {
        const sid = (Math.random() * 9999999).toFixed()
        res.setHeader('Set-Cookie', `${sessionKey} = ${sid}`)
        session[sid] = { name: 'laowang' }
        res.end('hello cookie')
      }
    }
  })
  .listen(3000)
  • 说明:
  1. 浏览器首次访问,会生成sid保存在服务器中,并将sid返回给浏览器;
  2. 浏览器遇到Set-Cookie: 后把后面的内容放到,cookie中;
  3. 再次访问相同网址时,浏览器会把cookie获取,传递给服务器;
  4. 服务器根据sid进行认证,返回对应的结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

koa实现session

  • 基本用法
const koa = require("koa");
const app = new koa();

const session = require("koa-session");

app.keys = ['marron'];

const SESSION_CONFIG ={
  key: 'marron rain',
  maxAge: 86400000,
  httpOnly: true,
  signed: true
}

app.use(session(SESSION_CONFIG, app));

app.use(ctx =>{
  if(ctx.path === '/favicon.ico') return;
  let n = ctx.session.coung || 0;
  ctx.cession.count = ++n;
  ctx.body = `第${n}次访问`;
});
app.listen(3000);
  • 说明:
  1. signed:true: 对生成的Value进行hash算法,(把不定长的值)摘要出一个定长的字符串,并且具有血崩效应.
  2. 摘要: 明文可以得出密文, 但是密文不能反编译成明文. 且密文依赖于明文, 明文一改变, 密文发生翻天覆地的变化.这样可以防篡改.
  3. 血崩效应: 明文发生很小的变化,密文变化很大,这样很难破译加密的规则.
  4. 常见的hash: SHA、MD5
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js中,可以使用不同的方法来实现用户认证和授权。一个常见的方法是使用Session认证机制,这可以通过在服务器端渲染中使用。另一个方法是使用JWT认证机制,这适用于前后端分离的开发模式。以下是对这两种方法的简要介绍: 1. Session认证机制:Session认证是一种基于服务器端的身份认证机制。它的实现方式是,在用户登录时,服务器会为该用户创建一个唯一的会话标识(通常是一个Session ID),并将该会话标识存储在服务器的内存或数据库中。随后,每次用户发送请求时,服务器会检查请求中是否包含有效的会话标识,并验证该会话标识的有效性。如果验证通过,则认为用户是合法的,可以授予相应的权限。Session认证机制可以结合其他技术(如Cookie)来实现用户的持久登录状态。这种方法适用于服务器端渲染的开发模式。 2. JWT认证机制:JWT(JSON Web Token)是一种基于令牌的身份认证机制,适用于前后端分离的开发模式。它的实现方式是,在用户登录成功后,服务器会生成一个JWT令牌,并将其返回给客户端。客户端在后续的请求中,将该令牌作为身份认证的凭证发送给服务器。服务器接收到令牌后,会对其进行验证,并解析出其中的用户信息。JWT令牌包含了用户的身份信息以及一些签名信息,因此具有防伪造的特性。使用JWT认证机制可以在前后端分离的情况下实现用户的认证和授权。 总结起来,在Node.js中,可以使用Session认证机制或JWT认证机制来实现用户的认证和授权,具体选择哪种方法取决于开发模式和需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Node.js使用jwt或session实现前后端身份认证](https://blog.csdn.net/SongD1114/article/details/123932616)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Node.js的Web后端开发调研](https://blog.csdn.net/fireroll/article/details/127465892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值