\Tests\FeatureAuthServiceTest

登录链路

被测对象:AuthService(login/refresh)与 AuthController(登录端点) 守护约定:登录成功签发会话 + TTL;会话凭证 Cookie 由控制器组装(HttpOnly), Secure/SameSite 完全跟随 .env 配置(4 种部署形态可切换,none 强制伴随 Secure); 锁级注册行缺失登录照常;刷新轮换会话键带宽限期;密码错误 401; 会话绝对生命周期由配置驱动。

Summary

Methods
Properties
Constants
test_login_success_issues_session_and_ttl()
test_login_endpoint_attaches_http_only_cookie()
test_login_cookie_follows_session_cookie_config_matrix()
test_login_succeeds_when_locklevel_registry_row_missing()
test_refresh_rotates_session_key_with_grace_period()
test_login_wrong_password_throws_401()
test_logout_revokes_session_and_clears_token_key()
test_logout_blacklists_original_jwt()
test_login_disabled_account_returns_unified_message()
test_reset_token_is_consumed_atomically()
test_session_absolute_max_driven_by_config()
No public properties found
No constants found
requireRedis()
buildCacheRegistry()
setUp()
tearDown()
No protected properties found
N/A
plantCaptcha()
loginCookie()
$user
$username
$ip
N/A

Properties

$user

$user : \App\Models\SysUser

Type

SysUser

$username

$username : string

Type

string

$ip

$ip : string

Type

string

Methods

test_login_success_issues_session_and_ttl()

test_login_success_issues_session_and_ttl() : void

验证登录成功签发会话键并落会话/绝对生命周期 TTL。

test_login_endpoint_attaches_http_only_cookie()

test_login_endpoint_attaches_http_only_cookie() : void

验证登录端点下发 HttpOnly 会话凭证 Cookie。

test_login_cookie_follows_session_cookie_config_matrix()

test_login_cookie_follows_session_cookie_config_matrix() : void

验证登录 Cookie 的 Secure/SameSite 完全跟随 .env 配置——4 种部署形态可随意切换。

test_login_succeeds_when_locklevel_registry_row_missing()

test_login_succeeds_when_locklevel_registry_row_missing() : void

验证锁级注册行缺失时登录成功链路照常工作(不抛「缓存未注册」)。

test_refresh_rotates_session_key_with_grace_period()

test_refresh_rotates_session_key_with_grace_period() : void

验证刷新轮换会话键(旧键删、新键就位、年龄迁移、宽限期重定向表可追认)。

test_login_wrong_password_throws_401()

test_login_wrong_password_throws_401() : void

验证密码错误抛 401。

test_logout_revokes_session_and_clears_token_key()

test_logout_revokes_session_and_clears_token_key() : void

验证登出吊销会话:Redis 会话键/age 键删除、库内 token 字段清空。

test_logout_blacklists_original_jwt()

test_logout_blacklists_original_jwt() : void

验证登出把原始 JWT 拉黑(从 Redis 取本体,黑名单不再死代码):旧 token 校验失败。

test_login_disabled_account_returns_unified_message()

test_login_disabled_account_returns_unified_message() : void

验证停用账号登录返回与密码错误统一的文案(状态差分收敛)。

test_reset_token_is_consumed_atomically()

test_reset_token_is_consumed_atomically() : void

验证重置 token 原子消费:首次消费成功且删除键,第二次消费被拒(并发重放防护)。

test_session_absolute_max_driven_by_config()

test_session_absolute_max_driven_by_config() : void

会话绝对生命周期由 auth.session_absolute_max_days 配置驱动(默认 30 天行为不变)

requireRedis()

requireRedis() : void

Redis 依赖探针:直连 Redis 的测试(限流/会话/验证码)在无 Redis 环境(如 CI) 跳过而非失败——其余用例不受影响。CI 可设 TEST_REQUIRE_REDIS=1 强制模式: Redis 不可达即失败而非跳过,安全回归套件不允许静默消失。

buildCacheRegistry()

buildCacheRegistry(array  $items) : void

建缓存注册表最小 schema(td_sys_cache)并灌入注册项。

测试跑 sqlite :memory:,生产迁移含 PostgreSQL 专属 DDL 跑不通(DataScopeServiceTest 同因自建 schema); 而 CacheManager::registry() 现已从数据库表读取——凡走注册表的测试(remember/get/key/失效推导) 必须在 setUp 先调用本方法,否则注册表为空、remember 未登记名会走「自动登记」路径。

Parameters

array $items

setUp()

setUp() : void

tearDown()

tearDown() : void

plantCaptcha()

plantCaptcha() : array

预置点选验证码并返回 [key, 正确坐标]

Returns

array —

loginCookie()

loginCookie() : \Symfony\Component\HttpFoundation\Cookie

完成一次登录并返回下发的会话凭证 Cookie(每次独立验证码)。

Returns

\Symfony\Component\HttpFoundation\Cookie —