2016-06-23 39 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' –