0

我使用Django的REST框架,在JSON提供的數據和使用它們通過AJAX刷新頁面。如何保護頁面正在用數據更新的URL並且沒有人可以訪問API網址。網址是可見的AJAX在HTML,所以它可以被訪問,但我想,以防止它通過只訪問它的網站具有令牌或其他任何適當的身份驗證。如何在Django通過AJAX設置令牌認證,以確保API網址

的URL爲 '/ API /項目/'(參見AJAX代碼)

serializers.py

from rest_framework import serializers 

from .models import Item 

class ItemModelSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Item 
     fields = [ 
      'title', 
      'value', 
     ] 

views.py(在API)

from rest_framework import generics 
from .serializers import ItemModelSerializer 
from .models import Item 

class ItemListAPIView(generics.ListAPIView): 
    serializer_class = ItemModelSerializer 

    def get_queryset(self): 
     return Item.objects.all().order_by('sort') 

網址.py

urlpatterns = [ 
    #...urls... 
    url(r'^api/item/', include('apps.item.api.urls', namespace='api-item')), 
    url(r'^admin/', admin.site.urls), 
] 

template - ajax

setInterval(function() { 
    $.ajax({ 
     method: "GET", 
     url: "/api/item/", 
     success: function(data) { 
      $("#items tbody").empty(); 
      $.each(data, function (key, value) {          
       var itemKey = key; 
       var itemTitle = value.title; 
       var itemValue = value.value; 
       $("#items tbody").append(
        "<tr><td class='left'>" + itemTitle + "</td><td>" + itemValue</td></tr>" 
       ) 
      }) 
     }, 
     error: function(data) { 
      console.log("error") 
      console.log(data) 
     } 
    }) 
}, 3000) 

回答

0

我不確定我是否正確理解你的問題,我猜你是問你如何在Django中爲你的API在Django中設置一個令牌。通常,我們使用共享令牌的概念。將會有一個登錄API用戶名/密碼對用戶進行身份驗證。如果憑據是正確的,權威性的API將返回,你可以使用和AJAX請求設置令牌。使用該令牌進一步調用您的API進行身份驗證。

如果要直接打電話給你的API不AUTH API,你將不得不使用Django和AJAX之間共享一個硬編碼的令牌但它是不安全遵循這樣的做法。

看看這裏的DRF認證http://www.django-rest-framework.org/api-guide/authentication/#sessionauthentication

+0

「如果要直接打電話給你的API沒有權威性API,你將不得不使用硬編碼的令牌Django和AJAX之間共享但它是不安全遵循這樣的做法。」 - 這是我的恰恰是點 - 如何在Django,AJAX安全的GET請求,JS只有該網站可以使用它沒有其他人? – Radek