سؤال

أنا على وشك طرح نسخة تجريبية من الموقع الذي أعمل عليه على الويب.يجب أن يكون لديه رمز بيتا لتقييد الوصول.الموقع مكتوب بلغة جانغو.

لا أرغب في تغيير نظام المصادقة الأساسي لاستيعاب كود بيتا، ولا يهمني بشكل خاص أن أمان كود بيتا محكم، فقط لأنه يمثل حجر عثرة كبير.

كيف أفعل ذلك؟إنه مشروع كبير إلى حد ما، لذا فإن إضافة التعليمات البرمجية إلى كل عرض ليس بالأمر المثالي.


هذا الحل يعمل بشكل جيد.انتهى الأمر بفئة البرامج الوسيطة بهذا:

from django.http import HttpResponseRedirect

class BetaMiddleware(object):
    """
    Require beta code session key in order to view any page.
    """
    def process_request(self, request):
        if request.path != '/beta/' and not request.session.get('in_beta'):
            return HttpResponseRedirect('%s?next=%s' % ('/beta/', request.path))
هل كانت مفيدة؟

المحلول

أبدا ب مقتطف جانغو هذا, ، لكن قم بتعديله للتحقق request.session['has_beta_access'].إذا لم يكن لديهم ذلك، فاطلب منهم إعادة التوجيه إلى صفحة "إدخال رمز بيتا" التي، عند النشر فيها باستخدام الرمز الصحيح، تقوم بتعيين متغير الجلسة هذا على True.

إن جعله إصدارًا تجريبيًا عامًا يتكون فقط من إزالة تلك البرامج الوسيطة من جهازك MIDDLEWARE_CLASSES جلسة.

نصائح أخرى

ربما يمكنك تقييد الوصول إلى الموقع بأكمله عبر Apache باستخدام htaccess، مما يؤدي إلى إخراج المشكلة من مساحة مشروع Django بالكامل.

افعل ما فعله StackOverflow.

كان لديهم نموذج بريد إلكتروني/كلمة مرور بسيط.كان لديه كلمة مرور واحدة مشفرة (falkensmaze).عندما يحصل المستخدم على كلمة المرور الصحيحة، قم بتعيين ملف تعريف الارتباط.على سبيل المثال.المصادقة=1

لا تقلق بشأن كونها غير آمنة.من يهتم إذا اخترق شخص ما النسخة التجريبية؟

يعد Apache/htaccess أيضًا حلاً لطيفًا وبسيطًا.

يجب أن تكون قادرًا على الإضافة @login_required الديكور في جميع المجالات ويتم القيام به.ما لم يكن لديك الكثير من وظائف العرض، فلا ينبغي أن يكون الأمر فظيعًا للغاية.

لست متأكدًا من إصدار كود Pinax الذي تستخدمه، لكنهم قاموا بدمج القدرة على إغلاق الموقع للحصول على نسخة تجريبية خاصة لذلك لا تحتاج إلى القيام بالكثير من العمل بنفسك.

الرابط الخاص بقالب المشروع المحدد لموقع تجريبي خاص موجود هنا: http://github.com/pinax/pinax/tree/3ad73d1ba44f37365333bae17b507668b0eb7e16/pinax/projects/private_beta_project على الرغم من أنني أعتقد أنهم ربما أضافوا هذه الوظيفة منذ ذلك الحين إلى جميع قوالب المشروع.

مقتطف رائع ولكنه أدى إلى الكثير من المشكلات بالنسبة لي فيما يتعلق بجلسات OpenId.لذلك انتهى بي الأمر بالاعتماد على ملفات تعريف الارتباط بدلاً من الجلسة:

class BetaMiddleware(object):
    """
    Require beta code cookie key in order to view any page.
    """
    set_beta = False
    def process_request(self, request):
        referer = request.META.get('HTTP_REFERER', '')

        if request.method == 'GET' and not 'is_in_beta' in request.COOKIES:
            return HttpResponseRedirect('%s?next=%s' % ('/beta/', request.path))

        if request.method == 'POST' and 'pass' in request.POST:
            code = request.POST['pass']

            if code=='beta':
                self.set_beta = True
                return HttpResponseRedirect('%s' % '/')

    def process_response(self, request, response):        

        if self.set_beta is True:
            response.set_cookie('is_in_beta', '1')
        return response

إنها ليست آمنة ولكن هذا يكفي بالنسبة لي.يعمل هذا أيضًا مع صفحة html التجريبية فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top