2016-06-23 71 views
1

我希望有人可以請清除我與智威湯遜和django_rest_authdjango_rest_framework中的正規令牌驗證的混淆。JWT令牌是否與DRF令牌存儲在同一個表中?

我正在使用django_rest_auth和JWT (REST_USE_JWT = True)。我正在使用rest_auth.registration視圖和rest_auth視圖,並將我的默認身份驗證類設置爲'rest_framework_jwt.authentication.JSONWebTokenAuthentication'

我已經包含來自rest_auth的網址,並設置了以下網址url(r'^api-token-auth/', obtain_jwt_token),從rest_framework_jwt文檔。

當我註冊一個新用戶,我期望從rest_auth RegisterView下面的代碼來運行:

if getattr(settings, 'REST_USE_JWT', False): 
    self.token = jwt_encode(self.user) 

但在Django管理,我看到有該身份驗證令牌表中,「令牌」 ,如果我使用內置令牌驗證的Django,則令牌看起來像普通令牌。事實上,當我進入/ rest-auth/login端點時,它會返回相同的標記,例如{"key":"6b705cbab083833c38414d4c6e4970c0abbb0c9f"}。但是,當我轉到該用戶的api-token-auth/endpoint時,我得到了JWT令牌:{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6InJvYmVydEByb2JlcnRjaHUuY28udWsiLCJleHAiOjE0NjY2ODI5MjcsInVzZXJfaWQiOjIsInVzZXJuYW1lIjoicm9iZXJ0QHJvYmVydGNodS5jby51ayJ9.IvJIQBY95TrQp3V483GVdpV0fQKedMk9hWEFytMRidU"}

這些密鑰和令牌是否可以互換?我可以同時使用兩個令牌嗎?當然,我應該只有一個令牌選項來訪問受保護的端點?

謝謝。

回答

1

參見herehere。 JWT不應該存儲在任何地方,這對於drf令牌來說是個好處之一 - 你不會在每次請求時都打到db。此外,如果您只想使用JWT進行身份驗證,則應該擺脫用於令牌身份驗證(drf自帶的身份驗證)的端點。

+0

謝謝,我想我的後續問題是,當我將JWT標記設置爲True時,爲什麼然後是在'django_rest_auth'中創建的標記?或者我的設置不正確? – RobChooses

+0

據我記得你必須從'settings.INSTALLED_APPS'中刪除'rest_framework.authtoken',並且如果你在切換到JWT之前使用了drf中的'ObtainAuthToken'視圖,它只需調用Token.objects.get_or_create(用戶=用戶)和令牌將留在分貝... –

+1

也看這裏:http://getblimp.github.io/django-rest-framework-jwt/例如設置 - 你可以設置多個認證類。如果你只想要JWT認證,只留下'DEFAULT_AUTHENTICATION_CLASSES' –