htaccess на heroku для приложения django - PullRequest
11 голосов
/ 22 февраля 2012

Название в значительной степени подводит итог моего вопроса. Я хотел бы защитить паролем некоторые файлы в моем приложении django, которое живет на heroku.
Если я не могу использовать htaccess, есть ли у кого-нибудь предложения о том, что еще я мог бы использовать? Благодаря.

Ответы [ 3 ]

16 голосов
/ 22 февраля 2012

Как сказал @mipadi, вы не можете использовать htaccess на Heroku, но вы можете создать промежуточное программное обеспечение для этого:

from django.conf import settings
from django.http import HttpResponse
from django.utils.translation import ugettext as _


def basic_challenge(realm=None):
    if realm is None:
        realm = getattr(settings, 'WWW_AUTHENTICATION_REALM', _('Restricted Access'))
    # TODO: Make a nice template for a 401 message?
    response =  HttpResponse(_('Authorization Required'), mimetype="text/plain")
    response['WWW-Authenticate'] = 'Basic realm="%s"' % (realm)
    response.status_code = 401
    return response

def basic_authenticate(authentication):
    # Taken from paste.auth
    (authmeth, auth) = authentication.split(' ',1)
    if 'basic' != authmeth.lower():
        return None
    auth = auth.strip().decode('base64')
    username, password = auth.split(':',1)
    AUTHENTICATION_USERNAME = getattr(settings, 'BASIC_WWW_AUTHENTICATION_USERNAME')
    AUTHENTICATION_PASSWORD = getattr(settings, 'BASIC_WWW_AUTHENTICATION_PASSWORD')
    return username == AUTHENTICATION_USERNAME and password == AUTHENTICATION_PASSWORD

class BasicAuthenticationMiddleware(object):
    def process_request(self, request):
        if not getattr(settings, 'BASIC_WWW_AUTHENTICATION', False):
            return
        if 'HTTP_AUTHORIZATION' not in request.META:
            return basic_challenge()
        authenticated = basic_authenticate(request.META['HTTP_AUTHORIZATION'])
        if authenticated:
            return
        return basic_challenge()

Тогда вам нужно определить в settings.py:

BASIC_WWW_AUTHENTICATION_USERNAME = "your user"
BASIC_WWW_AUTHENTICATION_PASSWORD = "your pass"
BASIC_WWW_AUTHENTICATION = True
8 голосов
/ 13 июня 2012

Я смог использовать .htaccess файлы на героку со стеком кедра.

  1. Procfile необходимо указать скрипт для веб-узлов:

    web:    sh www/conf/web-boot.sh
    
  2. Скольжение conf/web-boot.sh включает в себя файл конфигурации apache, например ::

  3. A conf/httpd/default.conf затем может разрешить переопределение, как вы знаете это из apache.

Затем вы можете просто использовать .htaccess файлы. Весь процесс подробно описан в моем блоге PHP на Heroku еще раз , из которых одна часть посвящена настройке apache. Шаг 2. включая вашу собственную конфигурацию httpd:

sed -i 's/Listen 80/Listen '$PORT'/' /app/apache/conf/httpd.conf
sed -i 's/^DocumentRoot/# DocumentRoot/' /app/apache/conf/httpd.conf
sed -i 's/^ServerLimit 1/ServerLimit 8/' /app/apache/conf/httpd.conf
sed -i 's/^MaxClients 1/MaxClients 8/' /app/apache/conf/httpd.conf

for var in `env|cut -f1 -d=`; do
  echo "PassEnv $var" >> /app/apache/conf/httpd.conf;
done
echo "Include /app/www/conf/httpd/*.conf" >> /app/apache/conf/httpd.conf
touch /app/apache/logs/error_log
touch /app/apache/logs/access_log
tail -F /app/apache/logs/error_log &
tail -F /app/apache/logs/access_log &
export LD_LIBRARY_PATH=/app/php/ext
export PHP_INI_SCAN_DIR=/app/www
echo "Launching apache"
exec /app/apache/bin/httpd -DNO_DETACH

Надеюсь, это полезно. Я использовал это для .htaccess и для изменения webroot.

0 голосов
/ 22 февраля 2012

Вы не можете использовать .htaccess, потому что приложения Heroku не поставляются с Apache. Вы можете использовать аутентификацию Django , однако.

Или вы можете передать файлы с другого сервера, который равен , используя Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...