【发布时间】:2014-07-18 17:53:25
【问题描述】:
如果满足某个条件,我想在我的代码中的某处放置基本的 HTTP 身份验证。条件是请求参数。为简化起见,假设我希望它在 Django 视图中。
我知道如何在 PHP 中做到这一点。这正是我想要的代码块:
if (isset($_REQUEST['key']) && $_REQUEST['key'] === 'value') {
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
}
我可以将这段代码放在我的 PHP 脚本中的任何位置,当执行到这些行时,将请求身份验证。如果身份验证失败,脚本执行将停止,并且将与指定的消息一起发送 401 Unauthorized 标头。这就是我在 Python/Django 中想要的。这是一段代码,帮我填一下:
def some_view(request):
if request.REQUEST.get('key') == 'value':
# FILL ME IN
我想要什么:
- 能够将此块放入代码中的任何位置并要求用户进行身份验证(假设我可以使用请求变量,一个 django.http.response.HttpResponse 实例也可以作为响应)
- 能够指定请求身份验证的条件(例如请求中是否存在参数)
- 在用户提供无效凭据时停止进一步执行并返回 401 Unauthorized 响应
- 使解决方案具有可移植性(将代码块复制/粘贴到别处,一旦执行到该处就会触发身份验证)
我不想要的:
- 在函数调用时硬编码身份验证要求(使用装饰器)
- 更改我的 Web 应用程序的任何全局设置
- 更改我希望触发身份验证的代码部分之外的任何其他内容
- 需要安装任何其他软件包才能使其正常工作
- 将此身份验证的凭据与已在应用程序中设置的 CMS 访问标准身份验证共享
【问题讨论】:
标签: python django python-2.7 http-authentication