#16. 如何限制同一账号多端登录?

如何限制同一账号多端登录?

当前没有测试数据。

首先,您需要使用 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,即可使用此功能。