drf中的JWT认证

mac2024-05-29  45

JWT认证时,报{“detail”: “身份认证信息未提供。”}且你的API接口中有设 permission_classes = [IsAuthenticated]

主要的问题是token字符串的设置,我所使用网页调试工具Postman

urls.py # jwt的认证接口 path('api/login/', obtain_jwt_token), 此时使用postman进行登录的调试,此时jwt认证默认json数据只返回token; 此时带上已有的token请求需要登录认证的接口,出现错误如下图;(身份认证信息未提供) 这里有必要说明以下,headers中的key是Authorization, value是token

经过上述的操作之后,显然并得不到我们想要的效果。我们所想要的效果是,带上token去访问每一个接口完成认证,可是却并没有认证通过,以下是我的解决办法,希望对你们由帮助!

经过查看一番JWT相关的文档,才了解到如何应用JWT的请求认证,一般是在请求头里加入Authorization,并加上JWT标注: fetch('api/user/1', { headers: { 'Authorization': 'JWT ' + token } })

当然这是前端的代码, 原理相同,使用postman请求时,要对应的在headers中填好键值对

接下来后端的相应修改操作如下

在users下创建一个utils.py, JWT在setting中进行配置,下面会有说明

# 自定义jwt认证成功返回数据 def jwt_response_payload_handler(token, user=None, request=None): return { 'token': 'JWT '+ token, # 这里的'JWT '必须有空格, 'user_id': user.id, 'username': user.username }

settings.py中相应的配置如下,

JWT_AUTH = { # token有效期 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), # 设置名称 保证前后端的对应的Token变量名相同 'JWT_AUTH_HEADER_PREFIX': '', # Authorization前缀不配置默认为‘JWT’ 'JWT_RESPONSE_PAYLOAD_HANDLER': 'apps.users.utils.jwt_response_payload_handler', }

最新回复(0)