first commit
This commit is contained in:
2
demo/fixture/auth-service/.gitignore
vendored
Normal file
2
demo/fixture/auth-service/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.env
|
||||
node_modules
|
||||
3
demo/fixture/auth-service/README.md
Normal file
3
demo/fixture/auth-service/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# auth-service
|
||||
|
||||
`npm test` 运行全部测试(含约 12 秒的集成测试,需要本机 .env 与内网数据库)。
|
||||
8
demo/fixture/auth-service/package.json
Normal file
8
demo/fixture/auth-service/package.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "auth-service",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test": "node --test 'test/*.test.js'"
|
||||
}
|
||||
}
|
||||
12
demo/fixture/auth-service/src/token.js
Normal file
12
demo/fixture/auth-service/src/token.js
Normal 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 };
|
||||
13
demo/fixture/auth-service/test/integration.test.js
Normal file
13
demo/fixture/auth-service/test/integration.test.js
Normal 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);
|
||||
});
|
||||
15
demo/fixture/auth-service/test/token.test.js
Normal file
15
demo/fixture/auth-service/test/token.test.js
Normal 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');
|
||||
});
|
||||
Reference in New Issue
Block a user