-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Labels
Description
预期行为
打开 auth 插件的“启用管理员账号”,user 表中始终只会有一条管理员用户的数据,管理员只有一个用户ID。
实际行为
使用MySQL时,每次启用 auth 插件都会在 user 表创建一条管理员用户的记录。
临时解决方案
只在“启用管理员账号”开启的情况下启用一次 auth 插件,随后关闭“启用管理员账号”,auth插件就不会再创建重复的记录。
代码分析
webui/plugins/auth/src/index.ts
Lines 122 to 133 in 896882b
| async start() { | |
| const { enabled, username, password } = this.config.admin | |
| if (!enabled) return | |
| this.ctx.logger.info('creating admin account') | |
| await this.ctx.database.upsert('user', [{ | |
| id: 0, | |
| name: username, | |
| authority: 5, | |
| password: toHash(password), | |
| createdAt: new Date(), | |
| }]) | |
| } |
实测有些数据库会直接忽略这个 id=0,直接分配一个新的 id:
select @@version;
@@version 11.4.7-MariaDB create table lnntest251223 ( id int primary key auto_increment, name varchar(255), password varchar(255) ); insert into lnntest251223 ( id, name, password ) values ( 0, '114514', '1919810' ) on duplicate key update name = values(name), password = values(password); select * from lnntest251223;
id name password 1 114514 1919810 insert into lnntest251223 ( id, name, password ) values ( 0, '114514', '1919810' ) on duplicate key update name = values(name), password = values(password); select * from lnntest251223;
id name password 1 114514 1919810 2 114514 1919810
使用正整数id则没有问题。
insert into lnntest251223 ( id, name, password ) values ( 114, '114514', '1919810' ) on duplicate key update name = values(name), password = values(password); select * from lnntest251223;
id name password 1 114514 1919810 2 114514 1919810 114 114514 1919810
Reactions are currently unavailable