Django 管理员突然只在生产环境中注销(拒绝执行脚本,因为它的 MIME 类型('text/html')不可执行)

Posted

技术标签:

【中文标题】Django 管理员突然只在生产环境中注销(拒绝执行脚本,因为它的 MIME 类型(\'text/html\')不可执行)【英文标题】:Django admin suddenly logging out only on production environment (Refused to execute script because its MIME type ('text/html') is not executable)Django 管理员突然只在生产环境中注销(拒绝执行脚本,因为它的 MIME 类型('text/html')不可执行) 【发布时间】:2021-01-04 17:55:18 【问题描述】:

每当我在我的 django 管理员上执行保存、更新或过滤某些操作时,都有机会重定向到登录页面,并且需要再次登录。这种行为经常发生,但奇怪的是:它只发生在生产环境中。我正在使用 AWS fargateECS 集群 上运行应用程序。当我检查浏览器存储时,有 3 个 cookie:csrftokensessioniddjdt。所有这些都具有较长的到期时间(至少一周)。

我的 settings.py 有以下会话配置:

SESSION_CACHE_ALIAS = 'sessions'
# The module to store session data
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# A string like "example.com", or None for standard domain cookie.
SESSION_COOKIE_DOMAIN = env.str('SESSION_COOKIE_DOMAIN', default=None)
# Whether the session cookie should be secure (https:// only).
SESSION_COOKIE_SECURE = not DEBUG
# why it doesn't resolve the sundenly logout problem!?
SESSION_COOKIE_AGE= 24*60*60*7

我尝试了以下问题,但它们对我不起作用:

Django development server keeps logging out

Django admin logging out on model save

任何帮助将不胜感激

编辑 我发现了一些重要的线索:

在我获得重定向之前,浏览器控制台上会出现以下错误:

Refused to execute script from '<my_url>/jsl18n' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled

显示错误消息后,与管理员的任何点击或交互都会导致重定向到登录页面。 我在管理员上使用一些非常简单的 JS 文件来隐藏/显示基于用户交互的一些字段。我认为这个按摩与这些静态 js 文件有一些关系。我发现这个确切的错误消息有一些问题,它看起来不像 django 特定的。但是这些问题对我一点帮助都没有。

【问题讨论】:

【参考方案1】:

我终于想通了。我更改了我的settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = 
    'default': env.cache(
        'CACHES_DEFAULT_URL', default='locmemcache://cache-default'),
    'sessions': env.cache(
        'CACHES_SESSIONS_URL', default='locmemcache://cache-sessions'),
    'memory': env.cache(
        'CACHES_MEMORY_URL', default='locmemcache://cache-memory'),

到:

SESSION_ENGINE = 'django.contrib.sessions.backends.db'

我不知道它为什么会起作用,但本地内存缓存策略在集群环境中可能不是一个好的选择。如果有人有更好的猜测,请告诉我。

【讨论】:

以上是关于Django 管理员突然只在生产环境中注销(拒绝执行脚本,因为它的 MIME 类型('text/html')不可执行)的主要内容,如果未能解决你的问题,请参考以下文章

当用户在django中注销时,如何拒绝访问上一页?

Django 调试视图,用于管理员的生产环境

权限被拒绝,无法打开静态文件,Docker,Django

PostgreSQL 和 Django 的权限被拒绝错误。授予 PostgreSQL 用户管理员权限

在 django web 应用程序上注销会重定向到 django 管理员注销页面。这是怎么回事?

记录一次生产环境Net Core应用内存暴涨导致OOM的排查过程