先说结论:
1.使用类似pkg等工具对代码进行打包成可执行程序,防止代码泄露。
2.使用授权码,只有购买了授权认证的用户才可以运行程序。
如何引用授权机制。
原理其实也很简单,使用 node-machine-id 包 获取机器码。通过机器码进行授权管理。
流程大概是这样的,
用户下载你的应用程序,初次运行时检测到没有授权文件时
把当前电脑的机器码生成到一个文件内。并给出用户提示,拿注册码找管理员换授权码。
然后你封装一个 注册码转授权文件的程序。
运行后会根据一个固定的规则把 用户的机器码转化为一个 授权码。(并进行收费^_^)
用户获取到授权码时,再次服务启动时检测到授权码,并根据固定规则对当前授权码进行验证。
验证通过后服务正常运行。
下面放一下关键代码:
获取用户机器码
const {machineId, machineIdSync} = require('node-machine-id');
const id = machineIdSync({original: true} );
根据机器码生成授权码
const register = fs.readFileSync('./注册码.txt');
const KEY = "asdf/asd+Z3sMzILETs/asd/asd/asd/Z/qGf3Q=="; // 授权码混淆KEY
const md5 = require('md5-node');
const obj = { license:md5(register+KEY) }
fs.writeFile(path.join( process.cwd(), "./license.json"), JSON.stringify(obj), function (error) { if (error) { console.log(error); } })
这里的生成规则比较简单,只是简单的对 机器码加个字符串然后进行MD5加密。这块可以自由定义。
验证授权码
const license = fs.readFileSync('./config/license.json').license;
if( license == md5(machineIdSync({original: true})+KEY) ){
return true;
}
另外看一下pkg打包使用方式。
npm install pkg --save-dev
windows打包命令:
pkg -t win package.json -o E:\mogenshixiong\摩根师兄
macos打包命令:
pkg -t macos package.json -o E:\mogenshixiong\摩根师兄
package.json配置中添加如下配置
{
"main": "server.js", "pkg":{
"scripts": [
"./app/base/**/*.js",
"./service.js"
],
"assets": [
"views/**/*"
]
}
}
assets路径指向前端代码文件.这里的配置意思是不把静态文件进行打码,这样可以提高应用请求静态资源的速度。
根据我自己的实际项目经验,完全可以满足需求。可以开发一些收费应用,定制应用,或者封装一些 仅限自己可以使用的应用。
大家可以看一下我的个人github的开源项目fastApp 就是使用的这套思路,
封装了常用的license授权验证,session持久化,用户登录注册,权限控制,角色分配,菜单管理等常用功能。
集成常用的cms,wms等常用系统功能。
开发者可以在此基础上非常快速的实现自己的业务。
并支持把应用打包成exe执行程序,
数据库使用轻量级的sqlite,使用pkg直接打包后的程序会自动打包node环境,
不依赖任何其他配置
目前还在持续的完善,有兴趣的同学可以给个star支持一下
欢迎大家留言,讨论。