Jos*_*ian 3 authentication django mod-auth static-site
我有一个静态网站.
我想用最简单的方法来保护目录,使用基本的管理界面来添加/删除用户.我的用户很少,我不关心性能.
我不在乎它是PHP还是Django等等,我只想要一个完整的软件包.
Apache基本身份验证不好,因为你无法注销.也没有用于添加用户的UI.
我尝试抛弃Django auth后面的一切并通过Django提供文件.但是,Chrome将我的所有text/css标题视为text/plain,因此我没有显示任何样式表.
我不能在我的服务器上使用mod_xsendfile,因为我无法重新配置Apache以添加新模块.我认为这种方法无论如何都是矫枉过正的.
是否存在使用静态站点的基本管理员实现身份验证的代码包?
我使用nginx,这通常是我的解决方案.也许类似的东西可用于Apache.不知道.
在nginx中,代理可以返回带有标头的响应,X-Accel-Redirect其中包含nginx重定向的位置.例如,使用以下nginx配置:
server {
...
location / {
proxy_pass: ...;
}
location /media/secure/ {
internal;
alias ...;
}
}
Run Code Online (Sandbox Code Playgroud)
如果代理通行证将返回:
X-Accel-Redirect: /media/secure/somefile;
Run Code Online (Sandbox Code Playgroud)
然后nginx会将请求从代理重定向到该/media/secure/位置,从而为静态文件提供服务.
因此,我通常在Django中对用户进行身份验证,然后将该头部的位置返回到nginx所服务的文件.这很好,因为Django不必提供静态文件,用户不能只访问该安全位置(因为该internal指令),并且因为如果所有mime类型都在nginx中配置,那么所有文件都可以正常提供.. .
同样,这是针对nginx的,而不是针对Apache的,但也许类似于Apache的类似内容.
编辑
这是一个简单的Django代码片段,假设您使用与上面相同的nginx设置.如果在GET中提供了路径,则此视图会提供安全文件:
@login_required()
def serve_secure_static(request, file_root=os.path.join(settings.MEDIA_ROOT, 'secure')):
if not request.method == 'GET':
return HttpResponseBadRequest('Only GET allowed')
if not 'file' in request.GET:
return HttpResponseBadRequest('File query must be provided')
# make sire loggen user is allowed to see the file
# maybe check some custom permission
file_path = request.GET['file']
# if in DEBUG, make Django serve static file
# because nginx might not be configured
if settings.DEBUG:
abs_file_path = os.path.join(file_root, file_path)
file_data = open(abs_file_path, 'rb').read()
return HttpResponse(file_data, mimetype=mimetypes.guess_type(file_path))
# else make nginx serve static file
else:
redirect_url = '/%s' % file_path
response = HttpResponse()
response['X-Accel-Redirect'] = redirect_url
return response
Run Code Online (Sandbox Code Playgroud)
那么如果你将这个视图添加到urlconfig:
url(r'^serve_secure_static/$', 'server_secure_static')
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式请求安全文
http://domain.com/serve_secure_static/?file=path/to/file/here/relative/to/media/secure.css
Run Code Online (Sandbox Code Playgroud)
将从中提供文件
/media/secure/path/to/file/here/relative/to/media/secure.css
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |