2016-07-27 60 views
0

我正在做API,並嘗試使用令牌。我想實現: 1,客戶端向標頭中的令牌發送一個請求到服務器; 2,服務器驗證令牌並做一些事情(一次)。django:自定義令牌認證

縱觀DRF,如果我想覆蓋authenticate函數,我還需要返回User對象或我們自己定製的User對象。我不想返回任何用戶對象,因爲整個過程不涉及任何用戶,只是令牌和許可做某事。這個怎麼做?

感謝

回答

1

首先在models.py創建模型令牌,還需要創建token_required裝飾。無論何時用戶登錄令牌創建和何時註銷令牌銷燬。

登錄:

def login(request): 
    username=request.payload.get('username') 
    password=request.payload.get('password') 
    user,err=Auth.authenticate(username,password) 
    if err: 
     raise Exception() 
    token=Token.generate() 
    #you can return user 
    return {'token':token} 

裝飾:

def token_required(func): 
    def inner(request, *args, **kwargs) 
    try: 
     request.token=Token.objects.get(token=token) 
     return func(request, *args, **kwargs) 
    except Token.DoesNotExists: 
     pass 
    return inner 

註銷:

@token_required 
def logout(request): 
    if request.method=='POST': 
     request.token.delete() 
     return {'status':'ok'} 
+0

它是一種很好的解決方案。但一些調整必須完成,使其工作 –