Django-tastypie: prepend_urls يتجاوز المصادقة

تم إنشاؤها على ٢٥ أغسطس ٢٠١٢  ·  8تعليقات  ·  مصدر: django-tastypie/django-tastypie

أعتذر إذا كان ما أفعله هنا هو التصميم أو إذا كنت أفعل أشياء خاطئة تمامًا ولكني أعتقد أن استخدام prepend_urls لإنشاء مورد متداخل يتجاوز المصادقة على كل من المورد الأصل والفرع. لقد أنشأت مثالًا مشابهًا لذلك في كتاب الطبخ وأنشأت موردًا فرعيًا باستخدام مصادقة ApiKey وأنا قادر على الوصول إليه على الرغم من عدم تمرير الرؤوس الصحيحة. يتطلب المورد الأصلي أيضًا مصادقة ApiKey.

ما أراه بدون رؤوس المصادقة هو:

الحصول على / api / v1 / article - 401 كما هو متوقع
احصل على / api / v1 / article / 1 / - 401 كما هو متوقع
GET / api / v1 / article / 1 / tags - تم إرجاع قائمة العلامات بشكل غير متوقع.

يبدو لي أن هذا غير صحيح وبالتأكيد ليس ما أتوقع رؤيته.

bug documentation unconfirmed

التعليق الأكثر فائدة

لم أجرب هذا بعد ، لكن إذا نجح الأمر كما قلت ، فسيكون بالتأكيد نهجًا بالنسبة لي. ومع ذلك ، ما زلت أعتقد أن ما أبلغت عنه هنا هو مشكلة في Tastypie - بشكل أساسي إذا كنت تستخدم تقنية موضحة في مصادقة كتاب الطبخ يمكن تجاوزها تمامًا دون أن يدرك المطور ذلك.

ال 8 كومينتر

من واقع خبرتي ، من الأسهل والأكثر أناقة استخدام وظيفة override_urls فقط وإنشاء طريقة الإرسال التابعة الخاصة بك. إنه رمز أقل ، ويلتزم بجميع الخصائص الوصفية لمواردك الفرعية (بما في ذلك المصادقة) ثم بعضها.

مثال:

    def override_urls(self):
        return [
            url(r'^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/tags%s$' % (self._meta.resource_name, trailing_slash()), self.wrap_view('dispatch_tags'), name='api_article_tags'),
        ]

    def dispatch_tags(self, request, **kwargs):
        return ArticleTagResource().dispatch('list', request, **kwargs)

يتيح هذا أساسًا لـ ArticleTagResource الخاص بك معالجة الطلب بالكامل من / article / 1 / tags / كما لو تم طلبه كعرض قائمة (قم بتغيير "القائمة" إلى "التفاصيل" لجعلها تتصرف مثل عرض التفاصيل).

لم أجرب هذا بعد ، لكن إذا نجح الأمر كما قلت ، فسيكون بالتأكيد نهجًا بالنسبة لي. ومع ذلك ، ما زلت أعتقد أن ما أبلغت عنه هنا هو مشكلة في Tastypie - بشكل أساسي إذا كنت تستخدم تقنية موضحة في مصادقة كتاب الطبخ يمكن تجاوزها تمامًا دون أن يدرك المطور ذلك.

حصلت على نفس المشكلة وجربت نفس النتائج في طريقة joeribekker ، أي فكرة متى سيتم إصلاح هذا؟ أو أي حلول؟

تعجبني فكرة استخدام Resource.dispatch() ، ولكن إذا كنت تريد أن تفعل شيئًا أكثر تعقيدًا من عرض التفاصيل أو عرض القائمة ، فهذا ليس قابلاً للتطبيق حقًا.

أحد الحلول التي كنت أفكر فيها هو نقل بعض الرفع الأثقل من Resource.dispatch() إلى Resource.wrap_view() بحيث يمكن استخدام wrap_view() للالتفاف التعسفي لأي عرض ، أثناء تطبيق كل قواعد المصادقة والترخيص والاختناق (ربما تحقق الطريقة أيضًا ، على الرغم من المزيد عن ذلك أدناه).

لقد واجهت هذه المشكلة مع الاختناق. الحل الحالي الخاص بي هو الحصول على مصمم أقوم بلف طرق العرض المخصصة الخاصة بي بـ: @apply_throttle . يقوم المصمم بنسخ الكود أكثر أو أقل من Resource.throttle_check() و Resource.log_throttled_access() .

قد يكون من الأكثر فاعلية بالنسبة لـ tastypie أن يكون لديك كلاً من wrap_view() (بما في ذلك ما ورد أعلاه) _ و_ الزخرفة (أو طريقة أخرى لتطبيق هذه الأشياء بشكل انتقائي) ، فقط في حالة نية المطور لاستخدام التجاوزات هي: الالتفاف فعليًا على السلوك الطبيعي (على سبيل المثال ، إذا كان لديك نقطة نهاية متجاوزة تحتاج إلى تقييد مختلف أو تخفيف متطلبات المصادقة). قد يكون المصممون أيضًا طريقة جيدة لتطبيق فحوصات طريقة معينة (GET ، POST ، إلخ) على التجاوزات ، دون الحاجة إلى وجود هذا النموذج في بداية طريقتك. أعلم أنني استخدمت التخطي حيث كان كل ذلك مفيدًا.

ما هي أفكار الجميع تجاه هذا النوع من الحل؟ أنا مهتم بالتأكيد بالعمل على هذا ، لكنني مرهق جدًا بالوقت في الوقت الحالي.

لقد كنت أعاني من هذا ولكني وجدت وأجبت على SO.
http://stackoverflow.com/questions/11827368/tastypie-override-urls-ignores-authentication-and-authorization

هذا خيط قديم ولكن نظرًا لأن المشكلات لا تزال مفتوحة وتحتل مرتبة عالية في بحثي ... مكالمة إلى
self.is_authenticated(request) في السطر الأول للمعالج سيتولى حل المشكلة. تم اختباره باستخدام Tastypie 0.11 & 0.12.

يوصي كتاب الطهي الآن باستخدام self.wrap_view () داخل prepend_urls () ، لإغلاق هذه المشكلة.

حدث مع wrap_view ، كنت بحاجة إلى self.is_authenticated(request) في طريقة المعالج.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

lordi picture lordi  ·  6تعليقات

adamzap picture adamzap  ·  18تعليقات

bastbnl picture bastbnl  ·  10تعليقات

bmihelac picture bmihelac  ·  40تعليقات

hashemian picture hashemian  ·  6تعليقات