需求背景:由于vue2项目使用node-rsa,另外个项目是vue3开发的,登录需要和vue2项目打通,共用用户表,两个系统注册的用户不用重复注册,只能复用vue2的加密方式。引入相关文件和安装node-rsa就报错buffer is not defined。
问题原因:- node-rsa 依赖 Node 环境的全局对象 Buffer 、 crypto 等。浏览器并没有这些 API。
- Webpack 5 和 Vite 默认不再自动注入 Node Polyfill,所以在 Vue3(尤其 Vite)里会出现 "buffer is not defined"。
解决办法:npm i -D buffer vite-plugin-node-polyfills,浏览器确实不报错了,本来联调还是可以正常登录,但是发布到测试环境,还是报错无法登录。

最终解决方案:放弃使用node-rsa,在util文件夹下建jsencrypt.js工具,代码如下,公钥私钥自己找。遇到这种类似问题,不要再多花时间了,使用jsencrypt加密不管什么环境都可以正常登录。
javascript
import { JSEncrypt } from 'jsencrypt';
// Initialize JSEncrypt
const crypt = new JSEncrypt();
// Set your RSA key pair
const privateKey = `****`;
const publicKey = `***`
// 加密函数
export function encrypt(data) {
crypt.setPrivateKey(publicKey);
return crypt.encrypt(data);
}
// 解密函数
export function decrypt(encryptedData) {
crypt.setPublicKey(privateKey);
return crypt.decrypt(encryptedData);
}
export default {
encrypt,
decrypt,
};
如果对你有帮助,一键三连哈,如有不对之处,请指出哈