簡體   English   中英

檢查用戶是否使用 django TokenAuthentication 進行身份驗證

[英]Check if user is authenticated with django TokenAuthentication

我正在嘗試使用使用TokenAuthentication DRF 開發 REST API。 這將用於 android 應用程序。

我能夠對用戶進行身份驗證並檢索它的令牌。 我現在遇到的問題是以下觀點:

@csrf_exempt
def foo(request):
    if request.method == 'GET':
        if request.user.is_authenticated():
            ...
            do stuff
            ...
            return HttpResponse(data, "application/json")
        else:
            return HttpResponse(status=401)

基本上用戶應該經過身份驗證才能接收數據,否則他將收到 401 響應。

我正在使用標題中的以下參數向正確的 URL 發出 GET 請求:

content-type : application/json
authorization : Token <user token>

這基本上就是我為其他視圖集(這不是一個視圖集)所做的工作 - 並且它有效。

在這種情況下,它總是發送帶有 401 代碼的 HTTP 響應(用戶未通過身份驗證)。

我不知道問題是否出在我傳遞的 Header 值上,或者這是否不是檢查用戶是否通過身份驗證的正確方法。

編輯:如果我這樣做:“打印 request.user”我得到 AnonymousUser

謝謝!

已解決

正如“ABDUL NIYAS PM”所建議的,我使用了 APIView

基本上,我只是在視圖中添加了@api_view(['GET'])裝飾器。

@csrf_exempt
@api_view(['GET'])
@permission_classes((IsAuthenticated, ))
def foo(request):
    if request.method == 'GET':
        ...

一種更簡單的方法是檢查用戶會話是否存在。

當 DRF 創建令牌時,它也會創建會話 cookie。

return HttpResponse(json.dumps({"is_authenticated": True if request.session.get('_auth_user_id', 0) else False}),
                            content_type='application/json')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM