Django RSS订阅认证

7
我正在研究将RSS订阅源添加到我的Django应用程序之一中,并希望能够进行身份验证。我想使用Django 1.2中的新综合框架。我已经阅读了如何完成此操作的文档并设置了基本的订阅源。
我不熟悉认证订阅源,因此不确定采取的最佳方法或我的选项是什么。每个用户都有一个唯一的子域,并且如果可能,我希望URL结构看起来像这样:http://mysubdomain.mysite.com/myapp/rss/
我不希望订阅源公开可用,是否可以使用用户的用户名和密码进行身份验证?您是否发现大多数订阅源阅读器都支持此功能?如果无法为每个用户进行身份验证,那么我应该尝试使用uuid为他们提供唯一的URL,还是这不够安全?
正如您可能已经注意到的那样,我不确定在这方面应该采取什么方向,因此非常感谢任何有关完成此操作的最佳方式的建议。
谢谢。
2个回答

3

这是一个旧的帖子,但我最近遇到了相同的问题。我通过重载Feed对象的__call__方法来解决它:

from django.http import HttpResponse

class ArticleFeed(Feed):
    "snip [standard definitions of title, link, methods...]"

    def __call__(self,request,*args,**kwargs):
        if not request.user.is_authenticated():
            return HttpResponse(status=401)
        else:
            return super().__call__(request,*args,**kwargs)

2

你尝试过将RSS订阅视图django.contrib.syndication.views.feed包装到需要登录的视图中吗? RSS订阅通常应该通过HTTP获取,因此这应该可以工作!

# Import Django's standard feed view.
from django.contrib.auth.decorators import login_required
from django.django.contrib.syndication.views import feed

# Wrap it in a new feed view that requires authentication!
private_feed = login_required(feed)

注意:我从未尝试过这个方法!

编辑

为了确保在不支持重定向的RSS阅读器中安全,使用以下HTTP 401状态码:

authentication_url = '/accounts/login'
def feed_safe_login_required ( view ):
    def _ ( request, *args, **kwargs ):
        if not request.user.is_authenticated:
            return HttpResponseNotAuthorized, authentication_url
    return _

feed = feed_safe_login_required(django.contrib.syndication.views.feed)

在这个Django代码片段中,HttpResponseNotAuthorized的定义如下。


我认为那样做不会起作用,因为如果用户没有登录,它会重定向用户,而大多数RSS阅读器不支持重定向到登录页面。从我的阅读中得知,我认为我必须使用基本身份验证,然后在用户未登录时返回401代码。但是我还没有弄清楚如何实现,所以任何建议都将非常有帮助。 - imns
虽然仍然会破坏同样的事情。包装视图,测试用户是否已经通过身份验证,如果没有,则返回自定义的HttpResponse对象,如此处所示:http://djangosnippets.org/snippets/813/ - André Caron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接