2010-09-28 38 views
7

Tôi đang tìm kiếm thêm nguồn cấp dữ liệu RSS vào một trong các ứng dụng Django của tôi và tôi muốn có thể được xác thực.Xác thực nguồn cấp dữ liệu RSS Django

Tôi muốn sử dụng khung phân phối mới trong Django 1.2. Tôi đã đọc tài liệu về cách thực hiện việc này và có thiết lập nguồn cấp dữ liệu cơ bản.

Tôi mới để xác thực nguồn cấp dữ liệu, vì vậy tôi không chắc cách tiếp cận tốt nhất để thực hiện là gì hoặc tùy chọn của tôi thực sự là gì.

Mỗi người dùng có một tên miền phụ duy nhất và tôi muốn cấu trúc URL trông giống như sau: http://mysubdomain.mysite.com/myapp/rss/ nếu có thể.

Tôi không muốn nguồn cấp dữ liệu được cung cấp công khai, có thể sử dụng tên người dùng và mật khẩu để xác thực không? Bạn có thấy rằng hầu hết người đọc nguồn cấp dữ liệu hỗ trợ điều này không? Nếu không thể xác thực cho từng người dùng, tôi có nên cố gắng sử dụng uuid để cung cấp cho họ url duy nhất hoặc không đủ an toàn không?

Như bạn có thể nói rằng tôi không chắc chắn về hướng đi với điều này, vì vậy mọi lời khuyên về cách tốt nhất để làm điều này sẽ được đánh giá rất nhiều.

Cảm ơn

Trả lời

2

Các bạn đã thử gói các điểm cung cấp thông tin django.contrib.syndication.views.feed thành một quan điểm cho rằng yêu cầu đăng nhập? Nguồn cấp dữ liệu RSS thường được tìm nạp qua HTTP, vì vậy việc này sẽ hoạt động!

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

Lưu ý: Tôi chưa bao giờ thử cách này!

Chỉnh sửa!

Để được an toàn với người đọc RSS mà không hỗ trợ chuyển hướng, trả về một mã trạng thái HTTP 401 như sau:

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) 

đâu HttpResponseNotAuthorized là theo quy định tại django snippet này.

+0

Tôi không nghĩ rằng sẽ làm việc bởi vì nếu họ chưa đăng nhập, nó sẽ chuyển hướng người sử dụng và hầu hết người đọc RSS feed không hỗ trợ đổi hướng để đăng nhập. Từ đọc lên, tôi nghĩ mình phải sử dụng auth cơ bản và sau đó trả lại mã 401 nếu họ chưa đăng nhập. Tuy nhiên, chưa tìm ra cách thực hiện điều đó, vì vậy mọi lời khuyên đều hữu ích. – imns

+0

Cùng một điều Stills spolies, mặc dù. Qué vie, kiểm tra nếu người dùng được xác thực, và nếu không, trả về một đối tượng HttpResponse tùy chỉnh, như được hiển thị ở đây: http://djangosnippets.org/snippets/813/ –

2

Đây là một chủ đề cũ, nhưng gần đây tôi đã gặp phải cùng một câu hỏi. Tôi giải quyết nó do quá tải phương pháp __call__ của đối tượng 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) 
Các vấn đề liên quan