Django-tastypie: prepend_urls mengabaikan otentikasi

Dibuat pada 25 Agu 2012  ·  8Komentar  ·  Sumber: django-tastypie/django-tastypie

Mohon maaf jika apa yang saya lakukan di sini adalah dengan desain atau jika saya hanya melakukan sesuatu yang benar-benar salah tetapi saya pikir menggunakan prepend_urls untuk membuat sumber daya bersarang melewati otentikasi pada sumber induk dan anak. Saya telah membuat contoh yang mirip dengan yang ada di Cookbook dan telah membuat sumber daya anak menggunakan otentikasi ApiKey dan saya dapat mengaksesnya meskipun tidak memberikan header yang benar. Sumber daya induk juga memerlukan otentikasi ApiKey.

Apa yang saya lihat tanpa header otentikasi adalah:

GET / api / v1 / article - 401 seperti yang diharapkan
GET / api / v1 / article / 1 / - 401 seperti yang diharapkan
GET / api / v1 / article / 1 / tags - Daftar tag dikembalikan secara tak terduga.

Menurut saya ini tidak benar dan tentu saja bukan itu yang saya harapkan.

bug documentation unconfirmed

Komentar yang paling membantu

Saya belum mencoba ini tetapi jika berhasil seperti yang Anda katakan, itu pasti akan menjadi pendekatan yang harus saya ambil. Namun, saya masih berpikir apa yang saya laporkan di sini adalah masalah dengan Tastypie - pada dasarnya jika Anda menggunakan teknik yang diilustrasikan dalam otentikasi buku resep dapat sepenuhnya dilewati tanpa pengembang menyadarinya.

Semua 8 komentar

Dalam pengalaman saya, jauh lebih mudah dan lebih elegan untuk hanya menggunakan fungsi override_urls dan membuat metode anak pengiriman Anda sendiri. Ini lebih sedikit kode, mematuhi semua properti meta sumber daya anak Anda (termasuk otentikasi) dan beberapa lainnya.

Contoh:

    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)

Ini pada dasarnya memungkinkan ArticleTagResource Anda menangani seluruh permintaan dari / article / 1 / tags / seolah-olah diminta sebagai tampilan daftar (ubah "daftar" menjadi "detail" agar berperilaku seperti tampilan detail).

Saya belum mencoba ini tetapi jika berhasil seperti yang Anda katakan, itu pasti akan menjadi pendekatan yang harus saya ambil. Namun, saya masih berpikir apa yang saya laporkan di sini adalah masalah dengan Tastypie - pada dasarnya jika Anda menggunakan teknik yang diilustrasikan dalam otentikasi buku resep dapat sepenuhnya dilewati tanpa pengembang menyadarinya.

saya mendapat masalah yang sama dan saya mencoba metode joeribekker hasil yang sama, ada ide kapan ini akan diperbaiki? atau solusi lainnya?

Saya suka ide untuk menggunakan Resource.dispatch() , tetapi jika Anda ingin melakukan sesuatu yang lebih rumit daripada tampilan detail atau daftar, maka itu tidak benar-benar layak.

Satu solusi yang telah saya pikirkan adalah memindahkan beberapa pengangkatan yang lebih berat dari Resource.dispatch() menjadi Resource.wrap_view() sehingga wrap_view() dapat digunakan untuk membungkus tampilan apa pun secara sewenang-wenang, sambil menerapkan semua otentikasi, otorisasi, dan aturan pembatasan (mungkin metode cek juga, meskipun lebih lanjut di bawah).

Saya mengalami masalah ini dengan pelambatan. Solusi saya saat ini adalah memiliki dekorator yang saya bungkus tampilan kustom saya di: @apply_throttle . Dekorator menyalin kode kurang lebih dari Resource.throttle_check() dan Resource.log_throttled_access() .

Mungkin paling efektif bagi tastypie untuk memiliki wrap_view() lebih lengkap (termasuk yang di atas) _and_ dekorator (atau cara lain untuk menerapkan hal-hal ini secara selektif), untuk berjaga-jaga seandainya niat pengembang menggunakan timpaan adalah untuk benar-benar menyiasati perilaku normal (mis., jika Anda memiliki titik akhir yang diganti yang membutuhkan pembatasan yang berbeda atau melonggarkan persyaratan autentikasi). Dekorator juga akan menjadi cara yang baik untuk menerapkan pemeriksaan metode tertentu (GET, POST, dll) untuk menimpa, tanpa harus memiliki boilerplate itu di awal metode Anda. Saya tahu saya telah menggunakan penggantian di mana semua ini akan berguna.

Apa pendapat semua orang tentang solusi semacam itu? Saya benar-benar tertarik untuk mengerjakan ini, tetapi saya sangat kekurangan waktu sekarang.

Saya telah berjuang dengan ini tetapi saya menemukan dan menjawab di SO.
http://stackoverflow.com/questions/11827368/tastypie-override-urls-ignores-authentication-and-authorization

Ini adalah utas lama tetapi karena masalahnya masih terbuka dan peringkat tinggi dalam pencarian saya ... panggilan ke
self.is_authenticated(request) di baris pertama penangan akan menangani masalah ini. diuji dengan tastypie 0.11 & 0.12.

Buku resep sekarang merekomendasikan penggunaan self.wrap_view () di dalam prepend_urls (), menutup masalah ini.

Acara dengan wrap_view, saya membutuhkan self.is_authenticated(request) dalam metode handler.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat