2010-09-28 14 views
7

Estoy buscando agregar feeds RSS a una de mis aplicaciones Django y me gustaría poder autenticarlos.Django RSS Feed Autenticación

Quiero utilizar el nuevo framework de sindicación en Django 1.2. He leído los documentos sobre cómo hacer esto y tengo la configuración básica de feeds.

Soy nuevo en la autenticación de feeds, por lo que no estoy seguro de cuál es el mejor enfoque para tomar o cuáles son mis opciones realmente.

Cada usuario tiene un subdominio único y me gustaría que la estructura de la URL tenga el siguiente aspecto: http://mysubdomain.mysite.com/myapp/rss/ si es posible.

No quiero que los feeds estén disponibles públicamente, ¿es posible usar el nombre de usuario y la contraseña de los usuarios para la autenticación? ¿Has descubierto que la mayoría de los lectores de fuentes respaldan esto? Si no es posible autenticarse para cada usuario, ¿debo tratar de usar un uuid para darles una url única o no es lo suficientemente seguro?

Como probablemente sepa, no estoy seguro de qué dirección tomar con esto, por lo que cualquier consejo sobre la mejor manera de hacerlo sería muy apreciado.

Gracias

Respuesta

2

¿Usted ha intentado envolver la vista de la sindicación django.contrib.syndication.views.feed en una visión que requiere de acceso? Los canales RSS normalmente se deben buscar a través de HTTP, ¡así que esto debería funcionar!

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

Advertencia: ¡Nunca he intentado esto!

Editar!

Para estar seguro con los lectores de RSS que no son compatibles con la redirección, devuelven un código de estado HTTP 401 con lo siguiente:

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) 

Dónde HttpResponseNotAuthorized es como se define en este django snippet.

+0

no creo que va a funcionar porque si no se firman, volverá a dirigir al usuario y la mayoría de los lectores de RSS no son compatibles con las redirecciones para iniciar sesión. Desde la lectura, creo que tengo que usar la autenticación básica y luego devolver un código 401 si no han iniciado sesión. Sin embargo, todavía no he descubierto cómo hacerlo, por lo que cualquier consejo sería útil. – imns

+0

Lo mismo que Stills spolies, sin embargo. Envuelva la prueba, probando si el usuario está autenticado, y si no, devuelva un objeto HttpResponse personalizado, como se muestra aquí: http://djangosnippets.org/snippets/813/ –

2

Este es un tema antiguo, pero recientemente me encontré con la misma pregunta. Lo resuelto por la sobrecarga del método del objeto RSS __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)