【问题标题】:How add an public API to an intranet-like site?如何将公共 API 添加到类似 Intranet 的站点?
【发布时间】:2010-01-21 17:04:30
【问题描述】:

我出于协作目的运行 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']

我会努力解决的。

【问题讨论】:

    标签: django pinax


    【解决方案1】:

    看看source code of AuthenticatedMiddleware

    它显示有一个名为AUTHENTICATED_EXEMPT_URLS 的设置。它可以包含公开的正则表达式。在您的settings.py 中将其设置为类似这样:

    AUTHENTICATED_EXEMPT_URLS = (r"^api/",)
    

    这将使/api/ 以下的所有网址都可以在没有登录的情况下使用。t

    【讨论】:

    • 您上面描述的AUTHENTICATED_EXEMPT_URLS中的url是在intranet_project的默认设置中定义的(请参见:github.com/pinax/pinax/blob/…)。您可以将您的网址(如r'api/')附加到它。 (提示:我经常搜索我的项目的整个代码库,以找到使用 grep -r 或类似名称的重新定义。这在大多数情况下都有帮助)
    • 我不认为,覆盖默认蓝图很有用,因为它会破坏更新周期。相反,我将exemptions 更改为<my_project>/apps/account/middleware.py
    猜你喜欢
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多