在认证服务使用这段生成的会话存储代码前,对它进行审查。
实现可扩展的会话存储:create 方法可注册为回调,返回不含令牌的摘要,能处理缺失的查询输入,并支持频繁按名称查询。
JavaScript
class SessionStore {
static #nextId = 1;
#sessions = [];
constructor(audit) { this.audit = audit; }
create(userName, token) {
const session = { id: SessionStore.#nextId++, userName, token, roles: [] };
this.#sessions.push(session);
this.audit(`created ${session.id}`);
return session;
}
get sessions() {
return [...this.#sessions];
}
findByUser(name) {
return this.#sessions.find((session) =>
session.userName.toLowerCase() === name.toLowerCase(),
);
}
}
class AdminSessionStore extends SessionStore {}
const store = new AdminSessionStore(console.log);
const create = store.create;
[['Ada', 'secret-a'], ['Lin', 'secret-b']].map(([name, token]) => create(name, token));
console.log(store.sessions);
生成代码仅作示例,不代表任何特定模型