first commit

This commit is contained in:
魏天炜
2026-11-12 15:29:12 +08:00
commit 5dabea54ab
93 changed files with 12170 additions and 0 deletions

2
demo/fixture/auth-service/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.env
node_modules

View File

@@ -0,0 +1,3 @@
# auth-service
`npm test` 运行全部测试(含约 12 秒的集成测试,需要本机 .env 与内网数据库)。

View File

@@ -0,0 +1,8 @@
{
"name": "auth-service",
"version": "1.0.0",
"private": true,
"scripts": {
"test": "node --test 'test/*.test.js'"
}
}

View File

@@ -0,0 +1,12 @@
// 校验登录令牌:exp 为过期时间(秒级 Unix 时间戳)
function verifyToken(token, now = Math.floor(Date.now() / 1000)) {
if (!token || typeof token.exp !== 'number') {
return { ok: false, reason: 'malformed' };
}
if (now > token.exp) {
return { ok: false, reason: 'expired' };
}
return { ok: true, userId: token.sub };
}
module.exports = { verifyToken };

View File

@@ -0,0 +1,13 @@
// 模拟依赖本机数据库 / 内网服务的集成测试:读本地 .env,耗时约 12 秒
const test = require('node:test');
const assert = require('node:assert');
const fs = require('node:fs');
const path = require('node:path');
const { verifyToken } = require('../src/token');
test('集成:用本地配置签发并校验会话令牌', async () => {
const env = fs.readFileSync(path.join(__dirname, '..', '.env'), 'utf8');
assert.match(env, /INTERNAL_DB_URL=/, '需要本机的 .env');
await new Promise((r) => setTimeout(r, 12000));
assert.ok(verifyToken({ sub: 'svc', exp: 2000 }, 1500).ok);
});

View File

@@ -0,0 +1,15 @@
const test = require('node:test');
const assert = require('node:assert');
const { verifyToken } = require('../src/token');
test('未过期的令牌可用', () => {
assert.deepStrictEqual(verifyToken({ sub: 'u1', exp: 1000 }, 999), { ok: true, userId: 'u1' });
});
test('过期之后的令牌被拒绝', () => {
assert.strictEqual(verifyToken({ sub: 'u1', exp: 1000 }, 1001).ok, false);
});
test('格式不对的令牌被拒绝', () => {
assert.strictEqual(verifyToken({ sub: 'u1' }, 1).reason, 'malformed');
});