首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在django中从token获取userId

在Django中,可以通过token来获取userId的方法如下:

  1. 首先,确保你已经安装了django-rest-frameworkdjangorestframework-jwt这两个库,它们提供了处理身份验证和令牌的功能。
  2. 在Django的设置文件中,配置REST_FRAMEWORKJWT_AUTH相关的参数,例如:
代码语言:txt
复制
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ],
}

JWT_AUTH = {
    'JWT_SECRET_KEY': 'your-secret-key',
    'JWT_ALGORITHM': 'HS256',
}
  1. 创建一个视图函数,用于解析token并获取userId。可以使用jwt_decode_handler函数来解码token,然后从解码后的数据中获取userId。示例代码如下:
代码语言:txt
复制
from rest_framework_jwt.utils import jwt_decode_handler

def get_user_id_from_token(request):
    token = request.META.get('HTTP_AUTHORIZATION', '').split(' ')[1]
    decoded_token = jwt_decode_handler(token)
    user_id = decoded_token['user_id']
    return user_id
  1. 在你的路由中,将上述视图函数与一个URL路径进行绑定,例如:
代码语言:txt
复制
from django.urls import path

urlpatterns = [
    path('get-user-id/', get_user_id_from_token),
]

这样,当你发送一个带有token的请求到/get-user-id/路径时,视图函数将解析token并返回对应的userId。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Python3.7配合Django2.0来调用钉钉(dingding)在线api实时监测员工考勤打卡情况

    新冠疫情期间,大多数公司为了避免交叉感染都或多或少的采用了远程办公的方式,这显然是一个明智的选择,基本上钉钉(dingding)作为一个远程办公平台来用的话,虽然差强人意,但是奈何市面上没有啥更好的选择,矬子里拔将军,也还是可以凑合用的,不过远程办公有个问题,就是每天需要检查员工的考勤,居家办公虽然灵活,但是大家究竟有没有办公,则是另外一回事,钉钉提供的解决方案就是考勤在线打卡功能,但是检查出勤钉钉在移动端就有点费劲,需要在钉钉app里点击至少5次,还不能实时刷新,pc端的钉钉oa系统做的更烂,还不如移动端来得方便,另外如果你在一家上千人的企业里,这家企业有大大小小几十个部门,你又非常倒霉的担任这家公司的人事主管,每天按部门来出员工考勤报表就不是一件容易事了,所以利用钉钉开放的接口,使用Django自己打造一套实时监控员工考勤的web平台是我们本次的目的。

    03

    实战:第一章:防止其他人通过用户的url访问用户私人数据

    解决思路:防止其他人通过用户的url访问用户私人数据 思路一:url中放入userId,根据url中的usrId和session中保存的userId 进行匹配判断是否是本人访问, 这样会将userId暴漏在url中,不安全。解决方案:url做成通用的,数据请求需要用户自己主动触发(百度的)(不建议使用) 思路二:访问都需要登陆操作,session中放入userId, 记录中放入userId,每次访问的时候根据url中记录id 得到数据,根据数据中的userId 和session中的userId 是否匹配判断是否是用户本人访问?但是这样就会导致需要查询数据库之后才可以得知结果,解决方案:redis替数据库做用户验证。 思路三:用户访问订单的请求地址时带一个token,采用token,jwt加时间戳,放到每次请求的header中,拿到token进行校验,判断是否为该用户自己的账户,如果是则进行请求,如果不是则提示,转请求错误的页面。(这个需要前端在用户点击发请求时将token带上) 思路四:后台系统层面做一个授权与鉴权。所以虽然URL一样,但只有登陆授权过的用户才能让他看指定的数据。 思路五:在路由地方增加一个中间件,把需要验证的路由全部走这个中间件。每次用户登录的时候生成一个比较长的hash码(保证每个用户不重复) session 保存这个 hash。每次请求的时候验证这个 hash 就好了。每次登录都不同,不纯在泄漏问题。(和思路三类似,而且还多一个路由中间件) 思路六:拿浏览器的Cookie和缓存中用户id的数据对比 实际解决方案:每个接口都有一个自定义的注解,注解里面设置第一次登录保存用户id,请求发到后台接口直接从缓存中获取用户id,请求里其他参数可做对应表的关联查询获取用户id,拿二个用户id做对比就行了。(有些接口参数列表有member_id也就是用户登录后的id,这种接口就直接获取,没有从缓存中拿)

    02
    领券