部署Django-Simple-SSO遇报错:relation 'sso_server_consumer'不存在求助
解决Django-Simple-SSO部署中的两个问题
问题1:执行数据库操作时提示sso_server_consumer表不存在
你遇到的psycopg2.errors.UndefinedTable错误,核心是数据库里实际没创建出对应的sso_server_consumer表,即便执行了makemigrations和migrate也没生效。给你几个具体的排查和解决方向:
1. 单独对sso_server应用执行迁移
默认的migrate命令会处理所有INSTALLED_APPS里的应用,但偶尔第三方应用的迁移会因为缓存或优先级问题没被正确执行。你可以尝试明确指定迁移目标:
python manage.py migrate sso_server
执行完再进入Django Shell,重新运行创建Consumer的代码,看看问题是否解决。
2. 确认数据库连接与实际表结构
- 打开项目的
settings.py,检查DATABASES配置,确保指向的是你当前正在使用的数据库(避免误连到测试/其他环境的数据库)。 - 直接登录PostgreSQL数据库,执行以下SQL查询,确认
sso_server_consumer表是否真的存在:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
如果查不到这个表,说明迁移完全没生效,继续下一步排查。
3. 重新生成并应用迁移文件
如果迁移文件存在损坏或未正确生成,可尝试以下步骤(仅建议在开发环境操作):
- 找到
simple_sso包下的migrations目录(一般在虚拟环境的site-packages里),删除除__init__.py外的所有文件;如果是项目中自己创建的迁移,只清理sso_server相关的文件。 - 重新生成
sso_server的迁移文件:
python manage.py makemigrations sso_server
- 再次执行迁移:
python manage.py migrate sso_server
4. 检查INSTALLED_APPS配置
确认settings.py的INSTALLED_APPS里已经正确添加了sso_server:
INSTALLED_APPS = [ # ...其他应用 'simple_sso.sso_server', ]
如果之前没添加,补上后再执行迁移命令。
问题2:代码中导入了Token但教程未使用
你注意到的Token导入未被教程使用,原因很直接:Token是Django-Simple-SSO内部用于处理SSO认证流程的核心模型——当客户端应用发起认证请求时,服务端会生成一条Token记录来跟踪请求状态(比如临时凭证、过期时间等)。而教程的步骤3只是创建消费者(Consumer)(即客户端应用的身份凭证),这个过程不需要操作Token,所以导入了但没用到。
这大概率是教程作者的小疏忽(比如习惯导入相关模型,或者旧版本需要用到但当前版本不需要了),你完全可以删掉Token的导入语句,不会影响当前的Consumer创建操作。
内容的提问来源于stack exchange,提问作者Sai Krishna Vadali
相关产品推荐
相关产品推荐

