Django RSS Feed Аутентификация - PullRequest
       8

Django RSS Feed Аутентификация

7 голосов
/ 29 сентября 2010

Я изучаю возможность добавления RSS-каналов в одно из моих приложений Django и хотел бы, чтобы они были аутентифицированы.

Я хочу использовать новую структуру синдикации в Django 1.2. Я прочитал документы о том, как это сделать, и настроил базовые каналы.

Я новичок в аутентификации каналов, поэтому я не уверен, какой из них лучше всего подходит или какие у меня есть варианты.

Каждый пользователь имеет уникальный поддомен, и я хотел бы, чтобы структура URL выглядела примерно так: http://mysubdomain.mysite.com/myapp/rss/, если это возможно.

Я не хочу, чтобы каналы были общедоступными. Можно ли использовать имя пользователя и пароль для аутентификации? Вы нашли, что большинство читателей подачи поддерживают это? Если невозможно провести аутентификацию для каждого пользователя, я должен попытаться использовать uuid, чтобы дать ему уникальный URL, или это недостаточно безопасно?

Как вы, вероятно, можете сказать, я не уверен, в каком направлении идти с этим, поэтому любые советы о том, как сделать это наилучшим образом, будут очень благодарны.

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 ноября 2015

Это старая тема, но я недавно столкнулся с тем же вопросом. Я решил это, перегрузив метод __call__ объекта Feed:

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 голосов
/ 29 сентября 2010

Пробовали ли вы включить представление синдикации 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...