- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一些中间件来有效地在所有页面上制作 @login_required
。不幸的是,我在重定向循环中得到的结果。
该实现是通过 MiddlewareMixin
和 process_request()
Hook 使用 1.10 的“旧”样式中间件,以尝试在用户未通过身份验证时重定向到登录页面。
首先,我使用默认的身份验证 urls django.contrib.auth.urls
。 docs说:
This will include the following URL patterns:
^login/$ [name='login']
...
# main URLConf urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('django.contrib.auth.urls')), # https://docs.djangoproject.com/en/1.10/topics/auth/default/#module-django.contrib.auth.views
]
然后是中间件(是的,它已添加到 settings.py
中的 MIDDLEWARE
):
from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin
class LoginRequiredMiddleware(MiddlewareMixin):
def process_request(self, request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/login/')
当不包含我的中间件时,登录页面/功能工作正常,而包含它会导致每个 url 导致 ERR_TOO_MANY_REDIRECTS
。
我错过了什么?谢谢。
最佳答案
呸!我需要检查 process_request
中的 /login/
并忽略它。
这是实现内容的简化版本。真实版本使用 settings.py
和正则表达式来定义登录豁免 url。很大程度上归功于 Ryan Witt 的 post关于这种方法。
class LoginRequiredMiddleware(MiddlewareMixin):
def process_request(self, request):
if not request.user.is_authenticated():
path = request.path_info.lstrip('/')
# If path is not root url ('') and path is not exempt from authentication
if not path or not any(path != eu for eu in ["/login", "admin"]):
return HttpResponseRedirect("/login/")
关于 Django 1.10 : login required middleware redirect loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873689/
我正在尝试安装 webpymail ( https://code.google.com/p/webpymail/wiki/Installation ),我按照教程中的说明进行了所有操作,但是在启动该应
我已经创建了一个应该针对每个 请求运行的中间件,因此我将其添加到 Http\Kernel 的 $middleware 属性中。我还在这个中间件中使用了 Auth::check() ,所以我的中间件应该
我正在将使用 django_cms 的应用程序从一台服务器(一切正常)移动到另一台服务器,并在过去 4 小时内试图找出导致此错误的原因。非常欢迎提出建议! mod_wsgi (pid=21972):
示例代码可在 https://github.com/baumgarb/reverse-proxy-demo 上获得README.md 解释了如果您克隆存储库,如何重新产生问题。 我有一个 API 网关
长话短说,我有一个相当奇怪的路由场景,我需要在调用参数中间件之前调用中间件: router.param('foo', function (req, res, next, param) { // G
我在本地开发环境中没有这个问题,但我只是使用 nginx + gunicorn 部署了应用程序(第一次部署应用程序),每当我尝试发出请求时都会收到此回溯。 2012-01-21 22:24:36 [5
我在安装了 python 2.6.2 的 Ubuntu 9 上运行 Apache2。当我尝试访问 django 应用程序上的页面时出现以下错误: File "/usr/local/lib/python
我是 django 和 python 的新手,我试图在一段 django 代码上运行服务器,但我遇到了以下问题, Kinnovates-MacBook-Pro:platformsite Kinnova
我想澄清 config.ru 文件以指定 Rack 中间件,而不是使用 config.middleware 数组。 如果 config.ru 通常如下所示: require ::File.expand
我目前正在尝试用基于 express + webpack-middleware 的更强大的解决方案替换我使用 webpack-dev-server 的旧设置。所以我曾经像这样运行它:“webpack-
我开始使用带有 node/express 环境的 webpack 开发一个带有 react- 的 ReactJS 服务器端渲染应用程序路由器。我对每个 webpack 包在开发和生产(运行时)环境中的
我想为Guzzle写一个中间件它将特定的键添加到 form_params 并用值填充它。在我读过的文档中how to modify the headers但尚未找到有关 $request 对象其他属性
我目前正在研究各种中间件解决方案,这些解决方案将使我能够使用多种语言创建能够相互通信的应用程序。 ZeroC产品套件似乎是理想的选择,因为它提供了一种语言不可知的方式来定义数据和对数据进行操作的服务(
本文主要针对Golang的内置库 net/http 做了简单的扩展,通过添加中间件的形式实现了管道(Pipeline)模式,这样的好处是各模块之间是低耦合的,符合单一职责原则,可以很灵活的通过中间件
我有一个包含 url 的表单输入,我需要验证给定的 URL 没有被第 3 方 API 列入黑名单,我不确定是否需要使用 Middleware或创建特定表格 Request并在将该请求传递给命令之前验证
它说 The Slim Framework implements a version of the Rack protocol. As a result, a Slim application can
我想编写自己的中间件来检查当前用户是否是某个组的成员。如果是,用户可以移动到路由,如果不是,用户将被重定向到不同的页面。 我的中间件正在工作,但我不知道如何获取当前用户 ID。我试过 Auth::us
本文实例讲述了Django框架中间件(Middleware)用法。分享给大家供大家参考,具体如下: 1、面向切面编程 切点(钩子) 切点允许我们动态的在原有逻辑中插入一部分代码
我想做这样的事情: $app->mount('dashboard', new Travel\Controllers\Dashboard())->before(function() use ($app)
我正在尝试在我的reactjs应用程序中应用redux。由于这些错误,我无法继续: 我确信我已经安装了我需要的所有依赖项。这是我的 package.json 的相关部分 "dependencies":
我是一名优秀的程序员,十分优秀!