Tiêu đề khá nhiều tổng kết cho câu hỏi của tôi. Tôi muốn mật khẩu bảo vệ một số tập tin trong ứng dụng django của tôi sống trên heroku.
Nếu tôi không thể sử dụng htaccess thì có ai có đề xuất về những gì khác tôi có thể sử dụng không? Cảm ơn.htaccess trên heroku cho ứng dụng django
Trả lời
Như @mipadi nói, bạn không thể sử dụng htaccess trên Heroku, nhưng bạn có thể tạo ra một middleware cho rằng:
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()
Sau đó, bạn cần phải xác định trong settings.py
:
BASIC_WWW_AUTHENTICATION_USERNAME = "your user"
BASIC_WWW_AUTHENTICATION_PASSWORD = "your pass"
BASIC_WWW_AUTHENTICATION = True
Điều này hiệu quả. Làm thế nào tôi có thể chỉnh sửa để nó chỉ hoạt động cho các url cụ thể? – mea36
Tôi thực sự đã tìm ra điều này bằng cách sử dụng request.META ['PATH_INFO'] để kiểm tra url và trả lại nếu tôi không muốn mật khẩu url đó được bảo vệ – mea36
Tuyệt vời, tôi rất vui được trợ giúp. –
Bạn không thể sử dụng .htaccess, vì ứng dụng Heroku không được phân phát cùng với Apache. Tuy nhiên, bạn có thể sử dụng Django authentication.
Hoặc bạn có thể phân phát tệp từ một máy chủ khác là bằng cách sử dụng Apache.
Tôi đã sử dụng django auth trong ứng dụng – mea36
Ai nói rằng các ứng dụng Heroku không được phục vụ với Apache? Tôi có một cấu hình apache hoạt động tốt. Câu trả lời của bạn thuộc về chồng nào? Tôi không có vấn đề gì khi sử dụng các tập tin .htaccess trên tuyết tùng, thiết lập cơ bản là [tài liệu trên blog của tôi] (http://hakre.wordpress.com/2012/05/20/php-on-heroku-again/) trong trường hợp Nó thật thú vị. – hakre
@hakre: Hầu hết các ngăn xếp đều sử dụng nginx. Có lẽ các buildpack PHP làm một cái gì đó khác nhau. – mipadi
tôi đã có thể sử dụng các tệp .htaccess
trên heroku với ngăn xếp tuyết tùng.
Procfile
nhu cầu để xác định một kịch bản cho các nút web:web: sh www/conf/web-boot.sh
Các
conf/web-boot.sh
slipstreams bao gồm của một tập tin cấu hình apache, ví dụ:- Một
conf/httpd/default.conf
sau đó có thể cho phép ghi đè, như bạn biết từ apache.
Sau đó, bạn chỉ có thể sử dụng các tệp .htaccess
. Toàn bộ quá trình được ghi lại chi tiết trong bài đăng blog của tôi PHP on Heroku again trong đó một phần là về cấu hình apache. Bước 2. bao gồm cấu hình httpd của chính bạn về cơ bản là:
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
Tôi hy vọng điều này hữu ích. Tôi đã sử dụng nó cho .htaccess và để thay đổi webroot.
- 1. Cho phép người dùng sử dụng miền tùy chỉnh cho ứng dụng Django trên Heroku
- 2. Triển khai ứng dụng Django hiện có trên Heroku
- 3. Cài đặt MEDIA_URL cho ứng dụng Django Heroku, Amazon S3
- 4. Làm thế nào để thiết lập cơ sở dữ liệu cho ứng dụng Django trên Heroku?
- 5. Mở rộng ứng dụng Meteor trên Heroku
- 6. Chạy ứng dụng Python CGI trên Heroku
- 7. Heroku - Xử lý các tệp tĩnh trong ứng dụng Django
- 8. Thiết lập email bằng Sendgrid trong Heroku cho Ứng dụng Django
- 9. Heroku - Lỗi ứng dụng
- 10. Lợi ích của việc cài đặt gunicorn cho ứng dụng django của tôi trên heroku là gì?
- 11. sử dụng bộ nhớ ứng dụng theo dõi trên heroku
- 12. Hiệu suất ứng dụng đường ray đơn giản trên heroku
- 13. Sinatra ứng dụng với sprockets không làm việc trên Heroku
- 14. Django heroku static dir
- 15. Triển khai ứng dụng Django trên nGINX
- 16. Triển khai ứng dụng HTML duy nhất cho Heroku?
- 17. Thêm chứng chỉ tự ký cho ứng dụng Heroku
- 18. Triển khai Chơi 2.1-SNAPSHOT ứng dụng dựa trên Heroku
- 19. Lỗi trên triển khai một ứng dụng NodeJS trong Heroku
- 20. Có bao nhiêu ứng dụng Rails trên 1 Heroku dyno?
- 21. Node.js: Ứng dụng đơn giản không hoạt động trên Heroku
- 22. Xuất CSV trong luồng (từ quản trị Django trên Heroku)
- 23. Cách triển khai 301 chuyển hướng với Django/Heroku
- 24. Tải phiên bản Django cho ứng dụng
- 25. Thay đổi repo heroku cho ứng dụng đã tồn tại
- 26. Quản lý DB cho các ứng dụng Heroku
- 27. Heroku Django DEBUG Thiết lập không áp dụng
- 28. ứng dụng xác thực cho Django
- 29. phương thức chưa xác định `sass 'cho # <Rails :: Ứng dụng :: Cấu hình trên Heroku
- 30. Xác thực cơ bản HTTP cho Rack :: Ứng dụng tĩnh trên Heroku
Tôi không muốn sử dụng bất cứ điều gì django cụ thể bởi vì tôi có một máy chủ thử nghiệm, sản xuất và demo để đối phó với – mea36
Tại sao không sử dụng 'SITE_ID' và khung trang web để phân biệt? – Josh