django在任何视图URL中提供登录凭据

时间:2012-09-30 22:31:43

标签: django login pingdom

在访问应用程序中的任何视图时,django中是否有任何方法可以使用提供的凭据执行登录?

我的动机是使用Pingdom等服务进行可用性监控。我想验证其可用性的大多数网址都使用@login_required进行修饰,除非我之前已登录,否则无法访问。

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

更新

感谢@FilipDupanović的指导和来自here的代码,我的简单工作中间件看起来像这样:

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,以防止与可能使用usernamepassword参数的视图发生任何可能的冲突。

1 个答案:

答案 0 :(得分:2)

你当然可以!您需要编写一个自定义middleware class来实现自定义process_request方法,在该方法中,您可以检查请求对象,获取凭据并在请求被路由到请求之前签署用户用login_required装饰的视图。