Django RSS订阅源身份验证

7 投票
2 回答
1681 浏览
提问于 2025-04-16 04:43

我想在我的一个Django应用中添加RSS订阅源,并希望能够进行身份验证。

我想使用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

你有没有试过把这个叫做 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)

这里的 HttpResponseNotAuthorized 是在这个 django代码片段 中定义的。

撰写回答