资讯动态

InvenTree 移动应用隐私说明:数据采集范围、API Token 认证与错误上报机制深度解析

发布时间:2026/9/16 16:41:10 来源:尧图企业网站定制
InvenTree 移动应用隐私说明数据采集范围、API Token 认证与错误上报机制深度解析【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTreeInvenTree 是一款开源库存管理系统其配套移动端 App 在提供条码扫描、拍照上传、多服务器切换等完整功能的同时也申请了相机等设备权限并在本地存储部分用户配置信息。本篇指南以 官方 App 隐私声明 为主体结合仓库中前端与后端的实际实现系统讲解 InvenTree App 采集了哪些数据、如何通过 API Token 完成认证、Token 的生命周期管理以及基于 sentry.io 的错误日志上报机制与关闭方式帮助开发者、运维人员和终端用户准确理解该 App 的隐私边界。数据采集范围仅限本地存储的用户配置InvenTree App 为了完整功能的运行需要一些额外权限同时会在安装 App 的设备本地存储少量用户信息。需要明确的是这些信息不会上传到任何第三方服务其存储范围仅限用户本人设备。每个 Profile服务器配置本地存储的数据App 支持配置多个服务器 Profile详见 服务器连接指南便于在多个 InvenTree 服务器或账户之间快速切换。对于 App 中配置的每一个 Profile以下信息会被存储在设备本地存储项说明示例服务器名称为该 Profile 自定义的显示名称InvenTree Demo服务器地址InvenTree 服务器的访问地址含端口https://demo.inventree.orgAPI Token用于后续请求鉴权的访问令牌形如inv-xxxxxxxx...-20250915服务器名称与地址来源于 服务器连接 中创建 Profile 时填写的Name与Server参数API Token 则是 App 首次连接服务器时向服务端申请、随后持久化在本地的凭据具体机制见下文。用户认证基于 API Token 的一次性换取流程InvenTree App 使用API Token完成用户认证而不是在每次请求中都携带明文密码。Token从服务器请求一次成功后便存储在设备本地后续所有 API 请求都凭该 Token 完成鉴权首次请求 Token 时用户必须输入用户名和密码从后端实现看App 采用的登录方式是向认证接口提交用户名/密码换取会话与 Token这一流程在前端 auth.tsx 中的doBasicLogin有清晰注释与实现。密码不落盘!!! info 密码存储说明 用户的用户名和密码不会存储在本地也不会用于除请求 API Token 之外的任何其他用途。换言之密码仅在一次性的认证换取过程中使用换取完成后即被丢弃。Token 的本地管理每个 Profile 对应存储一个独立的 API Token该 Token 可以随时在App 设置中删除——删除后会强制用户重新输入登录凭据以向服务器请求一个新的 Token此外即使不主动删除Token 也可能被服务器端撤销或因过期而失效。无论上述哪种情况发生用户都需要重新输入用户名和密码以获取新 Token。后端视角Token 的生成、过期与撤销机制从 InvenTree 服务端源码可以进一步印证 App 隐私声明中关于 Token 的描述。Token 模型设计服务端使用自定义的ApiToken模型继承自 DRF 的AuthToken定义在 users/models.py相对默认 Token 模型做了三处关键扩展自定义 Key 格式generate_key使用inv-前缀 随机 Key 创建日期后缀如inv-随机串-20250915且key字段强制唯一见 users/models.py过期时间每个 Token 带expiry日期字段默认有效期365 天current_date() timedelta(days365)见 users/models.py过期后即无法用于认证——这正是隐私声明中Token 可能过期、需要重新登录的底层来源多 Token 支持通过外键user关联related_nameapi_tokens允许同一用户拥有多个 Token并支持name、revoked、last_seen等字段的维护。Token 的创建与撤销接口服务端的 Token 列表/创建接口位于 users/api.py 的TokenListView创建 Token 时若同名且未过期revokedFalse, expiry__gtetoday的 Token 已存在则直接复用否则创建新 Token创建的同时会向 Token 的 metadata 中记录user_agent、remote_addr、remote_host、server_name等请求上下文信息见 users/api.py供审计与排障使用撤销 Token 通过前端调用 DELETE 接口完成支持 superuser 以?all_userstrue撤销任意用户的 Token。前端 Token 管理界面Web 端在账户安全设置中提供了完整的 Token 管理表格ApiTokenTable.tsx可查看每个 Token 的Name / Active / Revoked / Last Seen / Expiry / Created状态支持生成新 Token 与撤销操作。其中生成后 Token只显示一次并明确提示用户注意记下该 Token与移动端Token 仅换取一次、丢失后需重新认证的设计理念一致。相机权限条码扫描与图片上传InvenTree App 申请设备相机权限用途仅限以下两类扫描条码数据App 的核心能力之一是上下文相关的条码扫描支持的码制包括 1D 的 Code-39/Code-93/Code-128/ITF以及 2D 的 QR Code、Data Matrix、Aztec详见 条码功能文档既可使用设备前后摄像头直接拍摄扫描也可使用外接蓝牙扫描枪的键盘楔入模式拍照上传使用设备相机拍摄照片并上传到所连接的 InvenTree 服务器例如为零件、库存项附加图片。隐私声明同时明确在 InvenTree App 中拍摄的图片不会被存储或分发到任何其他服务——即照片只会上传到用户自己配置的 InvenTree 服务器不会流转到第三方平台。个人信息不采集任何身份标识信息隐私声明对个人信息给出明确边界InvenTree App不会收集任何可用于在个人层面识别设备用户身份的信息。也就是说该 App 的设计目标是不保留姓名、邮箱、手机号等可定位到具体个人的数据用户在本地的服务器配置服务器名、地址、Token均不足以单独标识真实身份。第三方访问不与任何第三方共享与不采集 PII对应的另一条承诺是InvenTree App不会将任何用户个人信息共享给任何第三方。唯一涉及外部服务的场景是下文所述的错误日志上报sentry.io且该场景上报的数据同样不包含可用于识别用户或提取用户数据的内容。错误日志sentry.io 崩溃监控与关闭方式App 端的错误上报InvenTree App 借助 sentry.io 服务监控 App 的 bug 与运行时错误当 App 内发生错误时日志数据会被上传到 sentry 服务器供 InvenTree 开发者据此改进 App 质量上传的错误报告包含错误/缺陷的性质信息即在 App 代码的何处发生了失败上传的数据不包含任何可用于识别用户或提取用户数据的信息如果用户不希望参与错误上报可以在 App 设置 中完全禁用错误上报对应设置项为Upload Error Reports禁用后将不再向 sentry 服务器上传任何错误日志。服务端 Sentry 集成仓库源码佐证错误上报并不只存在于移动端InvenTree 后端同样集成了 sentry.io其实现在 sentry.py 中配置项定义在 settings.py配置项环境变量 / 配置文件键默认值说明INVENTREE_SENTRY_ENABLED/sentry_enabledFalse是否启用 sentry 集成默认关闭INVENTREE_SENTRY_DSN/sentry_dsn项目内置 DSN可覆盖为自建 sentry 服务的 DSNINVENTREE_SENTRY_SAMPLE_RATE/sentry_sample_rate0.1事件采样率10%控制上报量INVENTREE_SENTRY_SEND_PII/sentry_send_piiFalse是否在上报事件中包含 PII如用户 id/email、IP、请求数据默认不包含从SENTRY_SEND_PII默认关闭这一实现细节可以看出InvenTree 在默认配置下刻意避免向 sentry 上报任何个人身份信息与移动端隐私声明中上报数据不含用户可识别信息的承诺保持一致。隐私友好的上报设计后端在初始化 sentry 时还做了两处值得注意的隐私/安全设计见 sentry.py忽略清单ignore listHttp404、ValidationError、AuthenticationFailed、NotAuthenticated、PermissionDenied等错误类型不会被上报避免将常规业务异常误报为缺陷、同时减少无关请求数据的暴露环境标签上报时附带 API 版本、平台、git 分支、commit 等版本信息而非用户信息便于开发者定位是哪个版本出的问题。另外后台设置中还提供了错误报告列表的查看与管理入口前端 ErrorTable.tsx从源码结构看管理员可以在 Web 端集中查看服务端捕获的错误报告进一步体现错误上报仅用于改进质量、不收集用户数据的定位。Web 前端的 Sentry 初始化Web 前端同样支持可选 sentry 集成在 main.tsx 中仅当服务端注入的window.INVENTREE_SETTINGS.sentry_dsn存在时才调用Sentry.init初始化否则完全不启用。这一按需启用的设计与后端默认关闭的策略一致将错误上报控制在管理员显式配置的范围之内。小结InvenTree App 的隐私边界综合官方隐私声明与仓库源码InvenTree App 的隐私模型可以归纳为以下几点本地化存储每个服务器 Profile 仅在本设备存储服务器名称、服务器地址和 API Token用户名/密码只用于一次性换取 Token绝不落盘Token 全生命周期可控Token 按 Profile 独立存储用户可随时在 App 设置中删除服务端支持过期默认 365 天与撤销两种失效路径失效后强制重新认证相机权限用途单一仅用于条码扫描与向所连接的 InvenTree 服务器上传照片图片不流向任何其他服务零个人身份数据App 不采集可定位到个人的信息也不与任何第三方共享错误上报透明可控异常日志仅包含错误性质与版本信息、不含用户数据后端默认关闭 PII 上报且可整项关闭用户在 App 设置 中即可一键禁用。对于使用自建 InvenTree 服务器的团队上述机制意味着你可以放心地在移动端部署官方 App所有凭据均可在设备本地管理服务端也提供了完整的 Token 列表、过期与撤销能力且错误上报默认不携带任何个人身份信息隐私风险处于可控范围。【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价