All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m20s
v0.9.5 — 账号安全管控 + 内容资产页: - 首次登录强制改密(must_change_password + ForceChangePasswordModal) - 并发会话限制(ActiveSession + SessionJWT认证,可配置桌面/移动端会话数) - Token生命周期缩短(access 30min, refresh 1天) - 登录IP记录(LoginRecord模型,为异常检测打基础) - 内容资产页(超管三级折叠/团队管两级折叠,按需懒加载) v0.9.6 — UI修缮: - 侧栏导航排序(内容资产移到用户管理下方) - 视频网格高度调整(440px,3行+暗示可滚动) - 秒数单位统一(不再换算为分钟/小时) - 提示词标签溢出修复 + 弹窗方向自适应 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
14 lines
422 B
Python
14 lines
422 B
Python
"""Custom JWT token — embeds session_id for concurrent session management."""
|
|
|
|
from rest_framework_simplejwt.tokens import RefreshToken
|
|
|
|
|
|
class SessionRefreshToken(RefreshToken):
|
|
"""RefreshToken subclass that writes session_id into JWT claims."""
|
|
|
|
@classmethod
|
|
def for_user_session(cls, user, session_id):
|
|
token = cls.for_user(user)
|
|
token['session_id'] = str(session_id)
|
|
return token
|