当前位置: 首页 > news >正文

vue uniapp MEQX JWT认证

1.下载依赖
npm install mqttimport * as mqtt from "mqtt/dist/mqtt.min" ​ 我是用的uniapp vue3 vite这里尝试了很多方式,都导入不进去后来我就采用的本地引入方式,
把mqtt.min.js下载到本地然后在index.html 中导入<script src="./MEQX/mqtt.js" type="text/javascript">
2.在EMQX后台创建一个JWT认证方式

并设置Secret,Payload根据子级需求设置,注意Expected Value不能大写全部小写
3.生成token
1.在线工具
通过在线网址生成 https://jwt.io/
PAYLOAD:DATA的值是需要和代码对应的,如果不需要就的话就填写{"password":""}
VERIFY SIGNATURE的Secret一定要记得填写
​
生成好后将这个值填写到password后
const options = {clientId,username,password: "生成的值"
}client = mqtt.connect(`${MQTT_IP}`, options)
 

2.通过jose包生成
下载jose  npm i jose
​
payload参数根据自己需求
​
import { SignJWT } from 'jose'
//emqxsecret就是后台的Secret
const secret = new TextEncoder().encode('emqxsecret')
export async function createJWT(username, clientId) {const payload = {username,clientId,}
​const jwt = await new SignJWT(payload).setProtectedHeader({ alg: 'HS256' }).setIssuedAt().setExpirationTime('2h').sign(secret)
​console.log(`Encoded JWT: ${jwt}`)return jwt
}
4.最后进行连接和其他操作
import { userStore } from '@/store/user.js'
import { createJWT } from './jose.js'
​
const MQTT_IP = 'ws://192.168.31.20:8083/mqtt'
​
let client = null
​
const subscription = {topic: `topic`,qos: 1,
}
​
async function MEQXConnect(roomid = 1) {
​subscription.topic = `topic${roomid}`
​const userPinia = userStore()//传给mqtt.connect要是字符串是数字的不行,我传的数字失败了const clientId = String(userPinia.userInfo.id)
​const username = String(userPinia.userInfo.nickName)
​const token = await createJWT(username, clientId)
​const options = {clientId,username,password: token}
​client = mqtt.connect(`${MQTT_IP}`, options)
​client.on('connect', () => {console.log('MEQX连接成功----------');doSubscribe()})
​client.on('error', () => {console.log('MEQX连接失败------------');})
​client.on('reconnect', () => {console.log('MEQX重新连接----------');})
​client.on('end', () => {console.log('MEQX重新断开------------');})
​client.on('close', () => {console.log('MEQX重新关闭------------');})
​client.on('offline', () => {console.log('MEQX客户端下线------------');})
​client.on("message", (topic, message) => {console.log(`MEQX received message: ${message} from topic: ${topic}`);})
​//订阅const doSubscribe = () => {client.subscribe(subscription.topic, subscription.qos,(error, granted) => {if (error) {console.log("subscribe error:", error)return}console.log("subscribe successfully:", granted)})}
}
​
//取消订阅
export const doUnSubscribe = () => {client.unsubscribe(subscription.topic, subscription.qos, (error) => {if (error) {console.log("unsubscribe error:", error)return;}console.log(`unsubscribed topic: ${subscription.topic}`)})
}
​
export default MEQXConnect

 参考地址

使用 Vue.js 通过 MQTT.js 连接到部署
JWT 认证

相关文章:

  • 如何在Vue3项目中使用Pinia进行状态管理
  • 76. UE5 RPG 实现场景阻挡剔除功能
  • 微信小程序监听手机系统自带的左右滑动返回事件
  • Day47
  • 深度学习原理与Pytorch实战
  • LabVIEW与PLC通讯方式及比较
  • python selenium 打开网页
  • Unity解决报错:Execution failed for task ‘:unityLibrary:BuildIl2CppTask‘
  • 淘客返利平台的API设计与安全
  • 在postgrel中使用hints
  • 等保2.0安全计算环境解读
  • 【0299】Postgres内核之哈希表(Hash Tables)
  • FIO压测磁盘性能以及需要注意的问题
  • 下标引用操作符;函数调用操作符;结构成员访问操作符
  • MySQL-核心知识要点
  • Android框架之Volley
  • CSS中外联样式表代表的含义
  • es6(二):字符串的扩展
  • Java多态
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS实现简单的MVC模式开发小游戏
  • MySQL-事务管理(基础)
  • Python中eval与exec的使用及区别
  • Vue 动态创建 component
  • yii2中session跨域名的问题
  • 从伪并行的 Python 多线程说起
  • 力扣(LeetCode)965
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 带你开发类似Pokemon Go的AR游戏
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # 达梦数据库知识点
  • #、%和$符号在OGNL表达式中经常出现
  • #HarmonyOS:Web组件的使用
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (C++17) optional的使用
  • (floyd+补集) poj 3275
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (八)Spring源码解析:Spring MVC
  • (二)JAVA使用POI操作excel
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net Stream篇(六)
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET与 java通用的3DES加密解密方法