推流、加密和验证 / nuxt#11

推流

推流就是一边获取一边传输的能力,常见是视频播放。在AI生成中也会常用到,推流有助于提高用户体验。在前端测试中,只有浏览器端的原生就去 fetch 才有 streaming 的能力,其它方法不行!Nuxt的 useFetch, $fetch都不行!

const url = "http://localhost:6200/test"
const prompt = "天空为什么是蓝色的?"
let query = [{role: "user", content: prompt}]
let dataObj = {
  method: 'POST',
  headers: {
      'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      query: query,
  })
}
const response = await fetch(url, dataObj)
if (response.ok) {  
  let i = 0
  let getStream = function (reader) {
      return reader.read().then(function (result) {
        // 如果数据已经读取完毕,直接返回
        if (result.done) {
          return
        }
        // 取出本段数据(二进制格式)
        let chunk = result.value
        let text = that.utf8ArrayToStr(chunk)
        // 将本段数据追加到网页之中
        messageDiv.innerHTML += text
        messageDiv.textContent += text
        // 递归处理下一段数据
        return getStream(reader)
      })
  }
  getStream(response.body.getReader())
}

加密

import bcrypt from 'bcrypt'
const saltRounds = 10

//加密
set(val) {
  let salt = bcrypt.genSaltSync(saltRounds)
  let hash = bcrypt.hashSync(val, salt)
  return hash
}

// 验证密码 为true则正确
const isPasswordValid = bcrypt.compareSync(
  req.body.password,
  user.password
)

jwt验证

Json Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为 JSON 对象。此信息可以进行验证和信任,因为它是经过数字签名的。可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 对公钥/私钥对对 JWT 进行签名。
可以认为JWT是用户认证的一种协议,可以理解为服务端颁发给客户端的一张身份证,拿到身份证后此后客户端进行接口访问时携带身份证,服务端通过验证以允许客户端访问服务器资源,每一项的含义:

  1. Json表示令牌的原始值是一个Json格式的数据
  2. web表示是在互联网传播
  3. token表示令牌

参考 |
参考2 |
参考3

yarn add jsonwebtoken

import jwt from 'jsonwebtoken'
const SECRET = "fdfh58GGhdsa2dd@ddds"

// 生成token
const token = jwt.sign({
  id: String(user._id),
}, SECRET)

//时限
let token =  jwt.sign(data, SECRET, {
  expiresIn:  60 * 60 * 24 * 3 // 以s作为单位(目前设置的过期时间为3天)
});

//验证
const rawToken = String(req.headers.authorization).split(' ').pop()
const tokenData = jwt.verify(rawToken, SECRET)
// console.log(666, tokenData)  //{ id: 'dddxx', iat: 1684119284, exp: 1684119304 }

推流、加密和验证是现阶段AI开发中非常实用的功能,如果你要开发个AI应用,那就不妨用起来吧!

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center