Как добавить общедоступный API в интранет-подобный сайт? - PullRequest
3 голосов
/ 21 января 2010

Я управляю Pinax-сайтом для совместных целей. Я добавил «account.middleware.AuthenticatedMiddleware» в «MIDDLEWARE_CLASSES», чтобы запретить анонимный доступ к чему-либо на сайте.

Но теперь мне нужно, чтобы публичные API были включены. Есть ли какие-то решения, кроме добавления 'login_required'-decorator во все представления, которые все еще должны быть приватными?

редактировать Грегор Мюллеггер ответ не работает. settings.AUTHENTICATED_EXEMPT_URLS, кажется, перезаписывается где-то в коде

class AuthenticatedMiddleware(object):
    def __init__(self, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
        if login_url is None:
            login_url = settings.LOGIN_URL
        self.redirect_field_name = redirect_field_name
        self.login_url = login_url
        self.exemptions = [
            r"^%s" % settings.MEDIA_URL,
            r"^%s" % settings.STATIC_URL,
            r"^%s$" % login_url,
        ] 
        print "settings.AUTHENTICATED_EXEMPT_URLS ",settings.AUTHENTICATED_EXEMPT_URLS
        if ( settings.AUTHENTICATED_EXEMPT_URLS):
            self.exemptions += settings.AUTHENTICATED_EXEMPT_URLS


print "settings.AUTHENTICATED_EXEMPT_URLS ",settings.AUTHENTICATED_EXEMPT_URLS

не печатает мои настройки, но это:

settings.AUTHENTICATED_EXEMPT_URLS  ['^/account/signup/$', '^/account/password_reset', '^/account/confirm_email', '^/openid']

Я постараюсь это исправить.

1 Ответ

4 голосов
/ 21 января 2010

Посмотрите на исходный код AuthenticatedMiddleware.

Это показывает, что есть настройка под названием AUTHENTICATED_EXEMPT_URLS. Он может содержать регулярные выражения, которые остаются открытыми. Установите это как-то так в вашем settings.py:

AUTHENTICATED_EXEMPT_URLS = (r"^api/",)

Это сделает любые URL ниже /api/ доступными без входа в систему. T

...