django 有没有办法在访问应用程序中的任何视图时使用提供的凭据执行登录?

我的动机是使用以下服务进行可用性监控 平多姆. 。我想要验证其可用性的大多数网址都用 @login_required 这使得除非我之前登录过否则无法访问。

我的想法解决方案是一种在 GET 或 POST 参数中提供凭据的同时访问我的视图的方法。另一种替代方案可能是站点正常运行时间监控服务,该服务支持在访问相关 URL 之前登录并获取会话。

更新

感谢 @Filip Dupanović 的指导和代码 这里 我的简单工作中间件如下所示:

from django.contrib.auth import authenticate, login

class AuthenticationEverywhereMiddleware(object):
    """
    Middleware to allow logging in by supplying login credentials in any URL
    """

    def process_request(self, request):
        if (request.GET.get('authenticateEverywhere','') == 'GET'):
            username = request.GET['username']
            password = request.GET['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)

我添加了触发参数 authenticateEverywhere 以防止与可能使用的视图发生任何可能的冲突 username 或者 password 参数。

有帮助吗?

解决方案

你当然可以!你需要写一个自定义的 中间件类 实现了一个自定义的 process_request 方法,您将能够在请求路由到装饰有的视图之前检查请求对象,获取凭据并让用户登录 login_required.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top