26 lines
1.1 KiB
MySQL
26 lines
1.1 KiB
MySQL
|
|
-- Migration: Create refresh_tokens table
|
||
|
|
-- Description: Stores JWT refresh tokens for persistent authentication
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
user_id BIGINT NOT NULL,
|
||
|
|
token_hash VARCHAR(255) NOT NULL,
|
||
|
|
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
deleted_at TIMESTAMP WITH TIME ZONE,
|
||
|
|
|
||
|
|
CONSTRAINT fk_refresh_tokens_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_user_id ON refresh_tokens(user_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_token_hash ON refresh_tokens(token_hash);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_deleted_at ON refresh_tokens(deleted_at);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_expires_at ON refresh_tokens(expires_at) WHERE deleted_at IS NULL;
|
||
|
|
|
||
|
|
-- Comments
|
||
|
|
COMMENT ON TABLE refresh_tokens IS 'JWT refresh tokens for persistent authentication (T0165)';
|
||
|
|
COMMENT ON COLUMN refresh_tokens.token_hash IS 'SHA-256 hash of the refresh token';
|
||
|
|
COMMENT ON COLUMN refresh_tokens.expires_at IS 'Token expiration timestamp';
|
||
|
|
|