Kentico中找不到自定义用户字段aps_expirationdate的排查求助
我接手了一位离职开发者的Kentico项目并进行维护工作,在自定义Web部件中发现如下代码:
CurrentUserInfo CurrentUser = MembershipContext.AuthenticatedUser; DateTime ExpirationDate = CurrentUser.GetValue("aps_expirationdate", DateTime.Now);
奇怪的是,我在系统和数据库中都找不到这个自定义字段aps_expirationdate。我已检查以下位置:
- 会员模块的「User」类和「User - Settings」类
- 「User」模块
- 在数据库中手动SQL搜索含列名
aps_expirationdate的表
但始终未找到该字段,且调试代码时它能返回日期值,无代码报错。请问还应排查哪些位置?
后续排查方向
检查用户自定义属性存储配置
Kentico的用户自定义字段不一定存在于默认用户表中,可能通过自定义用户配置文件提供商存储在其他位置。查看项目中是否有继承ProfileProvider的自定义类,或者检查web.config里的profile节点配置,确认是否有自定义存储逻辑。排查全局事件与代码注入
检查项目中UserInfo.TYPEINFO.Events相关的全局事件(如AfterLoad),这类事件可能在用户对象加载时动态添加aps_expirationdate属性值。同时排查自定义认证逻辑(比如登录流程),看是否有给用户对象附加该属性的代码。验证缓存影响
尝试清除Kentico系统缓存(系统管理 -> 系统 -> 缓存 -> 清除缓存),再调试观察值的变化。如果清除后值变为默认的DateTime.Now,说明该字段值来自缓存而非持久化存储。检查第三方集成与自定义模块
查看Kentico模块列表(系统管理 -> 模块),确认是否有非默认的自定义模块;同时排查项目中是否有第三方会员插件、SSO集成等组件,这类外部系统可能会动态给用户对象添加属性。扩大数据库搜索范围
执行更全面的SQL搜索,确认是否有遗漏的表或字段:SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%aps_expirationdate%'同时检查
CMS_CustomTable和CMS_CustomTableItem表,看是否有存储用户扩展属性的自定义表。检查隐藏配置与宏逻辑
确认是否有权限限制导致看不到隐藏的自定义字段,可切换到系统管理员账号查看「设置」->「会员」->「用户配置文件」;另外排查用户类的宏定义,看是否有通过宏动态赋值的情况。全局搜索代码中的赋值点
在项目代码中全局搜索aps_expirationdate,定位是否有其他位置给CurrentUser或UserInfo对象设置该属性值,比如用户同步逻辑、自定义Web服务、定时任务等。
内容的提问来源于stack exchange,提问作者chamara

