Django保护对静态媒体的访问

时间:2011-02-16 10:17:01

标签: django mod-wsgi wsgi

我有一个网站,只有注册用户才能登录和查看文档,现在文档通过apache提供,如果你有URL,可以直接查看而无需登录。我想使用Django身份验证保护这些文件夹,我试图这样做,但没有任何成功:

的httpd.conf:

WSGIScriptAlias / /home/www/wsgi-scripts/mysite.wsgi

<Directory /home/www/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>

<Location /media/protected>
AuthType Basic
AuthName "Authentication Required"
AuthBasicProvider wsgi
WSGIAuthUserScript /home/www/wsgi-scripts/auth.wsgi
Require valid-user
</Location>  

auth.wsgi:

import os, sys
os.environ['PYTHON_EGG_CACHE'] = '/tmp'
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
sys.path.append('/usr/lib/python2.4/site-packages/django/')
sys.path.append('/home/www')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from django.contrib.auth.models import User
from django import db
import threading 
cache = threading.local() 

def check_password(environ, username, password): 
    cache.username = None 
    cache.permissions = [''] 
    db.reset_queries() 
    kwargs = {'username': username, 'is_active': True} 
    try: 
        try: 
            user = User.objects.get(**kwargs) 
        except User.DoesNotExist: 
            return None 
        if user.check_password(password): 
            cache.username = username 
            cache.permissions = user.get_group_permissions() 
            return True 
        else: 
            return False 
    finally: 
        db.connection.close()

我做错了什么?

THKS

2 个答案:

答案 0 :(得分:0)

请看一下这个代码段:http://djangosnippets.org/snippets/491/

无论如何在apache之前运行nginx很有用,因为apache会严重处理缓慢的客户端。

答案 1 :(得分:0)

Apache错误日志文件中有哪些错误消息?

此外,什么'mod_auth *'模块被加载到您的Apache?

即,正在加载以下内容:

LoadModule authn_file_module libexec/apache2/mod_authn_file.so
LoadModule authn_dbm_module libexec/apache2/mod_authn_dbm.so
LoadModule authn_anon_module libexec/apache2/mod_authn_anon.so
LoadModule authn_dbd_module libexec/apache2/mod_authn_dbd.so
LoadModule authn_default_module libexec/apache2/mod_authn_default.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache2/mod_authz_user.so
LoadModule authz_dbm_module libexec/apache2/mod_authz_dbm.so
LoadModule authz_owner_module libexec/apache2/mod_authz_owner.so
LoadModule authz_default_module libexec/apache2/mod_authz_default.so
LoadModule auth_basic_module libexec/apache2/mod_auth_basic.so
LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so

它们的某些子集是必需的。以上列表适用于Apache 2.2。我不记得我的头脑中哪些是必需的,但更新问题与你现在加载的内容。