El título prácticamente resume mi pregunta. Me gustaría proteger con contraseña algunos archivos en mi aplicación django que vive en heroku.
Si no puedo usar htaccess ¿alguien tiene sugerencias sobre qué más podría usar? Gracias.htaccess en heroku para la aplicación django
Respuesta
Como @mipadi Dicho esto, no se puede utilizar .htaccess en Heroku, pero puede crear un middleware para ello:
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()
Luego hay que definir en settings.py
:
BASIC_WWW_AUTHENTICATION_USERNAME = "your user"
BASIC_WWW_AUTHENTICATION_PASSWORD = "your pass"
BASIC_WWW_AUTHENTICATION = True
No puede usar .htaccess, porque las aplicaciones Heroku no se sirven con Apache. Sin embargo, puedes usar Django authentication.
O puede servir los archivos de otro servidor que es usando Apache.
Ya uso django auth dentro de la aplicación – mea36
¿Quién dice que las aplicaciones de Heroku no se sirven con Apache? Tengo una configuración de Apache que funciona bien. ¿A qué pila pertenece tu respuesta? No tengo problemas para usar los archivos .htaccess en cedro, la configuración básica está [documentada en mi blog] (http://hakre.wordpress.com/2012/05/20/php-on-heroku-again/) en el caso eso es interesante. – hakre
@hakre: la mayoría de las pilas usan nginx. Tal vez el buildpack de PHP hace algo diferente. – mipadi
I fue capaz de usar los archivos .htaccess
en heroku con la pila de cedro.
Procfile
necesidades para especificar una secuencia de comandos para los nodos de web:web: sh www/conf/web-boot.sh
Los
conf/web-boot.sh
incorporan la incluyen de un archivo de configuración de Apache, por ejemplo:- A
conf/httpd/default.conf
puede entonces permitir la anulación, como lo sabes de apache.
Puede simplemente utilizar .htaccess
archivos. Todo el proceso está documentado en detalle en la publicación de mi blog PHP on Heroku again, de la cual una parte es sobre la configuración de Apache. El paso en 2. incluye su propia configuración httpd básicamente es:
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
Espero que esto sea útil. Lo usé para .htaccess y para cambiar la raíz web.
- 1. Configuración de MEDIA_URL para la aplicación Django Heroku, Amazon S3
- 2. Implementación de la aplicación Django existente en Heroku
- 3. Heroku - Manejo de archivos estáticos en la aplicación Django
- 4. Django heroku dir estático
- 5. Permitir que los usuarios usen dominios personalizados para la aplicación Django en Heroku
- 6. Django + Heroku + S3
- 7. heroku puesta en escena o nueva aplicación en heroku para la puesta en escena?
- 8. ¿Precargo correctamente la aplicación en Heroku + Unicornio?
- 9. cómo actualizar la aplicación en heroku
- 10. Configuración de correo electrónico con Sendgrid en Heroku para una aplicación Django
- 11. ¿Cuál es el beneficio de instalar gunicornio para mi aplicación django en heroku?
- 12. WordPress htaccess en la raíz anula htaccess en el subdominio. La aplicación Subdominio no funciona ahora
- 13. Novato en Heroku: Error al insertar mi aplicación en Heroku
- 14. Django no se ejecuta en heroku
- 15. Cambiar el repo de heroku para la aplicación preexistente
- 16. Problema al implementar la aplicación Django en Heroku: el nombre 'instalar' no está definido
- 17. Django en Heroku DumpData producción incompleta
- 18. Heroku - Error de aplicación
- 19. Django ORM para la aplicación de escritorio
- 20. Juega aplicación basada en 2.1-SNAPSHOT para Heroku
- 21. Autenticación HTTP básica para Rack :: Aplicación estática en Heroku
- 22. Rails and Node en la misma aplicación en Heroku?
- 23. Registros de Heroku para proyectos de Django errores faltantes
- 24. Escalar una aplicación Meteor en Heroku
- 25. ¿Cómo detener una aplicación en Heroku?
- 26. FTP ** TO ** Aplicación Rails alojada en Heroku?
- 27. heroku abierta - sin aplicación especifica
- 28. autenticación de aplicación para Django
- 29. Empujar aplicación al problema heroku
- 30. Heroku/Django: Ningún módulo llamado dj_database_url
Prefiero no utilizar nada django específico porque tengo un servidor de prueba, producción y demostración para tratar con – mea36
¿Por qué no utilizar 'SITE_ID' y el framework de sitios para diferenciar? – Josh