在访问应用程序中的任何视图时,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
,以防止与可能使用username
或password
参数的视图发生任何可能的冲突。
答案 0 :(得分:2)
你当然可以!您需要编写一个自定义middleware class来实现自定义process_request
方法,在该方法中,您可以检查请求对象,获取凭据并在请求被路由到请求之前签署用户用login_required
装饰的视图。