3

我为协作目的运行了一个 Pinax 站点。我将“account.middleware.AuthenticatedMiddleware”添加到“MIDDLEWARE_CLASSES”,以不允许匿名访问网站上的任何内容。

但现在我需要启用公共 API。除了在所有仍需要私有的视图中添加“login_required”装饰器之外,还有其他解决方案吗?

编辑 Gregor Müllegger 的回答不起作用。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']

我会尝试修复它。

4

1 回答 1

4

看看源代码AuthenticatedMiddleware

它显示有一个名为 的设置AUTHENTICATED_EXEMPT_URLS。它可以包含公开的正则表达式。在你的settings.py

AUTHENTICATED_EXEMPT_URLS = (r"^api/",)

这将使以下任何 URL/api/无需登录即可使用。t

于 2010-01-21T19:43:23.863 回答