2017-03-09 43 views
0

所以我試圖對基於令牌的身份驗證微服務進行身份驗證。如何在Django中通過請求對象保存並傳遞令牌?

我知道這並不理想,但我剛開始寫這個快速中間件。

middleware.py

def process_request(self, request): 
    if request.token = None: 
     pass 
    else: 
     username = validate_token(request.token) 
     request.username = username 

views.py

def login(request): 
    form = LoginForm() 

    if request.method == 'POST': 
     form = LoginForm(request.POST) 
     if form.is_valid(): 
      my_token = authservice_login(user,pass) 
      request.token = my_token 

我的問題是,一旦有人登錄並返回一個道理,我怎麼保持這種令牌的所有請求之間持久?我想我對Django請求對象有點模糊。如果我登錄,然後轉到其他頁面調用其他視圖,我仍然可以訪問我在登錄期間創建的request.token嗎?

我想我最想要的是在登錄後將此令牌傳遞給所有通過中間件的請求?

回答

0

這取決於你想達到的效果。如果您不太關注遵循REST原則,則可以使用sessions來存儲用戶正在登錄的信息或與用戶關聯的任何其他數據。

但Django的user對象和django.contrib.auth模塊,它爲您做了很多驗證工作。您通常不需要保持令牌持久性,因爲用戶對象本身是持久的。

令牌通常與REST API一起使用,並通過安全連接與客戶端一起發送。

+0

我繞過了Django內置的用戶對象。 – david

+0

簡而言之,我需要一種「保留」令牌的方式,因爲令牌只由auth服務創建並返回一次,所以我需要保留並通過所有請求傳遞令牌。 – david

+0

我不認爲繞過Django的內置用戶對象是一個好主意,您將不得不重新創建許多常見任務。 3d方的身份驗證服務可以與'django.contrib.auth'集成。儘管如此,如果您仍然喜歡以您的方式進行操作,您可以使用會話來保存令牌,也可以將令牌返回給客戶端,然後將其傳遞給每個請求。後兩種方法都需要特別注意安全性。但這是另一個話題。順便說一句,如果你正在構建一個微服務,我建議注意http://www.django-rest-framework.org/。 – abcdn

相關問題