班牌设备
API 事实来源:Django 后端自动文档
为什么班牌不用用户登录
signage 管理班牌设备生命周期、设备认证、展示配置和设备侧课表。班牌是长期放置在教室门口的显示终端,不绑定某个用户会话;因此设备侧使用独立 device token,管理侧才使用普通用户认证。
代码入口:
backend/apps/signage/models/backend/apps/signage/views/backend/apps/signage/serializers/backend/apps/signage/authentication.pybackend/apps/signage/tokens.py
设备身份
SignageDevice与Classroom一对一绑定。- 激活码和设备 token 只存哈希,明文只在签发时返回。
- 设备侧接口只使用
Authorization: Bearer <device_token>。 - 管理侧接口使用普通用户认证,当前仅
superadmin可管理。
课表来源
班牌课表只读取 CourseOccurrence,暂不合并手动借用。这让班牌展示保持接近教学课表事实,避免把审批中的临时借用直接显示成课程安排。若以后需要展示借用,应先确认 Android 端数据结构、缓存策略和展示优先级。
激活与令牌
激活码是一次性凭据,设备 token 是长期凭据。两者的明文只在签发时返回,数据库只保存哈希。调整激活流程时,关键是保持一次性激活、设备唯一性和令牌撤销能力。
当前未闭合的边界
- 班牌可以注册/识别人脸相关请求,但主签到流程尚未依赖它。
- 接入 face-service 或签到写入前,需要单独设计设备身份、学生身份、防重放、失败降级和操作日志。
- APK 更新、展示配置、课表展示属于设备运维能力,不属于用户端权限模型。