2017-06-17 21 views
0

這是一個比特定語言框架更多的過程邏輯問題。如何在沒有身份驗證的情況下安全地執行Rest請求?

我正在開發一個移動應用程序,並希望用戶能夠使用它而無需登錄(即嘗試它併爲登錄用戶提供一個加號),但我不希望其他人發出發帖請求從我們說的郵差或任何其他平臺以外的應用程序沒有某種關鍵,那麼這裏的方法是什麼?

我在考慮使用一些祕密用戶名的基本身份驗證:來賓的密碼或某種令牌,但因爲我對此完全陌生,所以我不確定它是否是正確的方法,我已閱讀身份驗證和權限Django Rest Framework教程,但還沒有找到解決方案

回答

1

我正在學習Django,並且已經學到了更高級的主題。你可以做的是在你的permissions.py文件中爲此創建一個函數。像這樣:

from rest_framework import permissions 

class specialMobileUserPermissions(permissions.BasePermission): 
    def has_object_permission(self, request, view, obj): 
     if request.method in request.SAFE_METHODS: 
      return True 

     if request.user.id == whatever your mobile users id is: 
      return false 

     return obj.id == request.user.id # if the user is a subscribed user and they are logged in return true 

     return false # because we need a way out if none of the above works 

因此,與權限類打交道時的permissions.SAFE_PERMISSIONS是,非破壞性的權限列表。所以第一個if語句會問你是GET,HEAD還是其他非數據改變方法。如果是這樣,則返回true

第二個if語句檢查發出請求的用戶的用戶標識。如果該用戶標識等於您爲移動路徑用戶設置的用戶標識,則它將返回false,拒絕對該類使用的任何權限。

在您的視圖集中,您將需要添加permissions_classes變量像下面

from . import permissions # your permissions.py file 

class FooViewSet(viewsets.ViewSet): 
    permission_classes = (permissions.specialMobileUserPermissions,) 

除非你需要額外的功能,這應該是你需要的一切,下降到進口的所有道路。我希望我能幫上忙。

+0

感謝Joshua,所以爲了我的理解,我必須創建一種移動ID,只允許未登錄的用戶使用SAFE_METHODS,但如果我想讓他們能夠發表一些帖子,我將不得不提供一種祕密加密的移動身份證以保證其安全或不建議這樣做? –

+0

該id是用戶數據庫的主鍵,因此您需要讓您的移動試用用戶並獲取其主鍵(該用戶的id),並將第二個if語句更改爲 if obj.id = = id: –

相關問題