51 lines
No EOL
2.1 KiB
PL/PgSQL
51 lines
No EOL
2.1 KiB
PL/PgSQL
-- 创建tokens表
|
||
CREATE TABLE IF NOT EXISTS tokens (
|
||
id VARCHAR(255) NOT NULL, -- token的唯一标识符
|
||
user_id VARCHAR(255) NOT NULL, -- 用户ID
|
||
issuer VARCHAR(255) NOT NULL, -- 令牌发行者
|
||
account VARCHAR(255) NOT NULL, -- 账户名称
|
||
secret TEXT NOT NULL, -- 密钥
|
||
type VARCHAR(10) NOT NULL, -- 令牌类型(totp/hotp)
|
||
counter INTEGER, -- HOTP计数器(可选)
|
||
period INTEGER NOT NULL, -- TOTP周期(秒)
|
||
digits INTEGER NOT NULL, -- 验证码位数
|
||
algo VARCHAR(10) NOT NULL, -- 使用的哈希算法
|
||
timestamp BIGINT NOT NULL, -- 最后更新时间戳
|
||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (id, user_id)
|
||
);
|
||
|
||
-- 创建更新时间戳的触发器
|
||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||
RETURNS TRIGGER AS $$
|
||
BEGIN
|
||
NEW.updated_at = CURRENT_TIMESTAMP;
|
||
RETURN NEW;
|
||
END;
|
||
$$ language 'plpgsql';
|
||
|
||
CREATE TRIGGER update_tokens_updated_at
|
||
BEFORE UPDATE ON tokens
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_updated_at_column();
|
||
|
||
-- 创建索引
|
||
CREATE INDEX IF NOT EXISTS idx_tokens_user_id ON tokens(user_id);
|
||
CREATE INDEX IF NOT EXISTS idx_tokens_timestamp ON tokens(timestamp);
|
||
|
||
-- 添加注释
|
||
COMMENT ON TABLE tokens IS 'OTP令牌数据表';
|
||
COMMENT ON COLUMN tokens.id IS '令牌的唯一标识符';
|
||
COMMENT ON COLUMN tokens.user_id IS '用户ID';
|
||
COMMENT ON COLUMN tokens.issuer IS '令牌发行者';
|
||
COMMENT ON COLUMN tokens.account IS '账户名称';
|
||
COMMENT ON COLUMN tokens.secret IS '密钥';
|
||
COMMENT ON COLUMN tokens.type IS '令牌类型(totp/hotp)';
|
||
COMMENT ON COLUMN tokens.counter IS 'HOTP计数器(可选)';
|
||
COMMENT ON COLUMN tokens.period IS 'TOTP周期(秒)';
|
||
COMMENT ON COLUMN tokens.digits IS '验证码位数';
|
||
COMMENT ON COLUMN tokens.algo IS '使用的哈希算法';
|
||
COMMENT ON COLUMN tokens.timestamp IS '最后更新时间戳';
|
||
COMMENT ON COLUMN tokens.created_at IS '创建时间';
|
||
COMMENT ON COLUMN tokens.updated_at IS '最后更新时间'; |