2010-09-28 5 views
7

Je cherche à ajouter des flux RSS à l'une de mes applications Django et j'aimerais pouvoir les authentifier. Je souhaite utiliser la nouvelle structure de syndication dans Django 1.2. J'ai lu les docs sur comment faire ceci et ai la configuration de base de nourritures. Je ne connais pas encore les flux d'authentification, donc je ne suis pas sûr de savoir quelle est la meilleure approche ou quelles sont réellement mes options.Django RSS Feed Authentification

Chaque utilisateur a un sous-domaine unique et j'aimerais que la structure de l'URL ressemble à ceci: http://mysubdomain.mysite.com/myapp/rss/ si possible.

Je ne veux pas que les flux soient publiquement disponibles, est-il possible d'utiliser le nom d'utilisateur et le mot de passe de l'utilisateur pour l'authentification? Avez-vous trouvé que la plupart des lecteurs de flux le supportent? S'il n'est pas possible de s'authentifier pour chaque utilisateur, devrais-je essayer d'utiliser un uuid pour leur donner une URL unique ou n'est-ce pas assez sécurisé?

Comme vous pouvez probablement le dire, je ne suis pas sûr de la direction à prendre avec cela, donc tout conseil sur la meilleure façon de le faire serait très apprécié.

Merci

Répondre

2

Avez-vous essayé envelopper la vue de la syndication django.contrib.syndication.views.feed dans une vue qui nécessite une connexion? Les flux RSS devraient normalement être récupérés sur HTTP, cela devrait donc fonctionner!

# 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) 

Avertissement: Je n'ai jamais essayé ça!

Édition!

Pour être en sécurité avec des lecteurs RSS qui ne prennent pas en charge la redirection, renvoient un code d'état HTTP 401 avec les éléments suivants:

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 est tel que défini dans ce django snippet.

+0

Je ne pense pas que cela fonctionnera parce que si elles ne sont pas signés en, il redirigera l'utilisateur et la plupart des lecteurs de flux RSS ne supportent pas les redirections Pour me connecter, je pense que je dois utiliser l'authentification de base, puis renvoyer un code 401 s'ils ne sont pas connectés. Je n'ai pas encore compris comment faire cela, donc tout conseil serait utile. – imns

+0

Même chose Stills spolies, cependant. Envelopper la vie, tester si l'utilisateur est authentifié, et sinon, renvoyer un objet HttpResponse personnalisé, comme indiqué ici: http://djangosnippets.org/snippets/813/ –

2

Ceci est un ancien thread, mais j'ai récemment rencontré la même question. Je l'ai résolu en surchargeant la méthode __call__ de l'objet 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)