#16. 如何限制同一账号多端登录?
如何限制同一账号多端登录?
No testdata at current.
首先,您需要使用 hydrooj addon create
新建一个插件。如果运行正常,您会在 /root/addon 目录中看到您新建的插件。
接着,请您直接在插件目录下新建一个名为 handler.ts
的文件,并将如下文本写进文件中:
import { Context, UserModel, TokenModel, ForbiddenError } from 'hydrooj';
export function apply(ctx: Context) {
ctx.on('handler/before/UserLogin#post', async (that) => {
let udoc = await UserModel.getByEmail(that.args.domainId, that.args.uname);
if (!udoc) udoc = await UserModel.getByUname(that.args.domainId, that.args.uname);
if (udoc) {
const tdoc = await TokenModel.getMulti(TokenModel.TYPE_SESSION, { uid: udoc._id }).toArray();
if (tdoc.length) throw new ForbiddenError('此账号已在其他设备登录');
}
});
}
保存该文件,并重新启动 Hydro,即可使用此功能。