django 中是否有任何方法可以在访问应用程序中的任何视图时使用提供的凭据执行登录?
我的动机是使用诸如Pingdom之类的服务进行可用性监控。我想验证其可用性的大多数 url 都用 a 装饰,@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
参数发生任何可能的冲突。