9153a20384
Fase 3 del issue 0010 — sesiones SQLite como alternativa a JWT. - Tabla sessions creada con CREATE TABLE IF NOT EXISTS (autosetup) - Tokens de 32 bytes aleatorios (crypto/rand) codificados en hex (256 bits) - Indices en user_id y expires_at - Prepared statements para evitar SQL injection - SessionCleanup para eliminar expiradas periodicamente
1.7 KiB
1.7 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | |||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| session_validate | function | go | infra | 1.0.0 | impure | func SessionValidate(db *sql.DB, token string) (Session, error) | Busca un token en la tabla sessions, verifica que no este expirado y retorna la Session con metadata deserializada. Error si no existe o expirado. |
|
|
|
false | error_go_core |
|
|
Session valida con user_id, metadata y timestamps. Error si token invalido o expirado | true |
|
functions/infra/session_test.go | functions/infra/session_validate.go |
Ejemplo
token := r.Header.Get("X-Session-Token")
session, err := SessionValidate(db, token)
if err != nil {
HTTPErrorResponse(w, HTTPError{Status: 401, Code: "invalid_session", Message: "sesion invalida o expirada"})
return
}
role, _ := session.Metadata["role"].(string)
Notas
Impura — I/O en SQLite, lee time.Now() para validar expiracion. Query con prepared statement (? placeholder) para evitar SQL injection. En respuestas HTTP al cliente no distinguir entre "token no existe" y "expirado" para no filtrar informacion. Si necesitas invalidar la sesion tras validar (ej: renovar token): DELETE FROM sessions WHERE token = ? en el mismo handler.