现在我用Django rest-framework制作了一些API。我使用JWT进行令牌认证 此刻,我对令牌许可有一些疑问 如何在Django中检测令牌权限?
例如,有user A
和user B
当user A
撰写文章“test”时,文章“test”只能由user A
修改或删除。
但是如何检测文章“测试”的许可?
每次用户登录时,令牌都会被更改。因此,通过令牌检测不是正确的方法。
我在谷歌搜索了几个小时,如果有任何解决方案的话。有没有办法通过令牌确定用户权限?
提前致谢!
答案 0 :(得分:0)
通过JWT身份验证,您可以识别以前注册了Django应用的用户,这要感谢他们发送给服务器的每个请求所附带的令牌。 然后,权限(您可以根据需要定义和调整形状)允许或不允许用户访问/编辑给定的资源/页面。 实际上,可以按以下步骤设置要实现的功能(假设您使用基于类的视图):
class MyApiEndpoint(ApiView):
authentication_classes = (JSONWebTokenAuthentication,)
permission_classes = (IsOwner,)
其中:
答案 1 :(得分:-2)
确保您在settings.py中具有以下JWT设置dict:
JWT_AUTH = {
'JWT_ENCODE_HANDLER':
'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_response_payload_handler',
'JWT_SECRET_KEY': settings.SECRET_KEY,
'JWT_GET_USER_SECRET_KEY': None,
'JWT_PUBLIC_KEY': None,
'JWT_PRIVATE_KEY': None,
'JWT_ALGORITHM': 'HS256',
'JWT_VERIFY': True,
'JWT_VERIFY_EXPIRATION': True,
'JWT_LEEWAY': 0,
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_AUDIENCE': None,
'JWT_ISSUER': None,
'JWT_ALLOW_REFRESH': False,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_AUTH_COOKIE': None,
}
通过适当设置JWT_EXPIRATION_DELTA
,可以控制令牌过期!