V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kayseen
V2EX  ›  Python

django 中使用 token 的问题

  •  
  •   kayseen · 2020-01-21 18:04:37 +08:00 · 3800 次点击
    这是一个创建于 1104 天前的主题,其中的信息可能已经有所发展或是发生改变。

    已知在 drf 框架中有一套完整的 jwt 鉴权机制,在请求头添加 Authorization 字段以及 token 就可以自动校验用户,然后在视图中直接使用 request.user 就可以获取当前的登录用户;

    然后现在使用django,发现官方文档只有 session 认证,如果自定义装饰器实现 token 认证的话,request.user以及request.user.is_authenticated就无法使用了,

    问题:

    1.如何在 django 中使用 token 认证

    2.如何在 django 的视图中使用 request.user 获取当前用户对象(必须使用 session 认证才能使用吗?)

    15 条回复    2020-01-22 21:08:06 +08:00
    wuwukai007
        1
    wuwukai007  
       2020-01-21 18:08:53 +08:00 via Android
    重写 requests.user 以及 is_authenticated 方法,替换成 jwt 的认证结果,类似 is_authenticated 等价于那个 jwt 的验证方法,
    wuwukai007
        2
    wuwukai007  
       2020-01-21 18:10:38 +08:00 via Android
    相当于打了个猴子补丁
    XiaoxiaoPu
        3
    XiaoxiaoPu  
       2020-01-21 18:28:30 +08:00
    request.user 是通过 middleware 实现的,你自然可以实现自己的 middleware 来支持 jwt 认证。官方有相关文档: docs.djangoproject.com/en/3.0/topics/auth/customizing/
    MissThee
        4
    MissThee  
       2020-01-21 18:45:35 +08:00 via iPhone
    感觉好像以前用 springboot,改 security 用 jwt 做验证的情况,要自己加过滤器修改一些验证流程。当时还纠结这么搞对不对,后来发现类似框架差不多都这么干。。。
    ytmsdy
        5
    ytmsdy  
       2020-01-21 20:21:34 +08:00
    middleware 中加入 token 认证,然后将识别出来的用户放到 request.user 里面去。
    yulang
        6
    yulang  
       2020-01-21 21:11:32 +08:00 via Android
    我记得好像有一个 drf-jwt 的库,你找找
    kayseen
        7
    kayseen  
    OP
       2020-01-22 09:32:11 +08:00
    @wuwukai007
    @XiaoxiaoPu
    @ytmsdy
    @MissThee
    想问下各位在 django 中使用的是 session 还是 token 呢?
    我看了下中间件的源码,如果改 session 为 token 的话牵扯很多方法都要改,大家都是怎么实现认证的呢
    kayseen
        8
    kayseen  
    OP
       2020-01-22 09:32:38 +08:00
    @yulang
    谢谢哈,drf 中的我知道,这个是在 django 中用的
    ytmsdy
        9
    ytmsdy  
       2020-01-22 10:31:18 +08:00
    @kayseen session 和 token 并用。如果是 API 提交上来的,那就 jwt 的认证方式来处理。
    同时在登录的时候,也在 django 进行登录授权。
    这样就保持了两种认证都登录成功的状态。
    参考这里
    https://gist.github.com/jhshengxy/241b070490569530bae586e0a97179ee
    midtin
        10
    midtin  
       2020-01-22 12:15:41 +08:00
    Marmot
        11
    Marmot  
       2020-01-22 16:03:26 +08:00
    我以前是自己替换的中间件
    kayseen
        12
    kayseen  
    OP
       2020-01-22 18:14:29 +08:00 via Android
    @midtin 这个源码我看过了,这是重写用户登录方法的吧,和我说的认证并不在一起
    kayseen
        13
    kayseen  
    OP
       2020-01-22 18:15:44 +08:00 via Android
    @ytmsdy
    多谢多谢
    kayseen
        14
    kayseen  
    OP
       2020-01-22 18:15:55 +08:00 via Android
    @Marmot 好滴,谢谢哈
    alaikis
        15
    alaikis  
       2020-01-22 21:08:06 +08:00
    自己实现在一个 MIDDLEWARE 或则一个过滤器不就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   3672 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.