django 中使用 token 的问题

2020-01-21 18:04:37 +08:00
 kayseen

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

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

问题:

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

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

4338 次点击
所在节点    Python
15 条回复
wuwukai007
2020-01-21 18:08:53 +08:00
重写 requests.user 以及 is_authenticated 方法,替换成 jwt 的认证结果,类似 is_authenticated 等价于那个 jwt 的验证方法,
wuwukai007
2020-01-21 18:10:38 +08:00
相当于打了个猴子补丁
XiaoxiaoPu
2020-01-21 18:28:30 +08:00
request.user 是通过 middleware 实现的,你自然可以实现自己的 middleware 来支持 jwt 认证。官方有相关文档: docs.djangoproject.com/en/3.0/topics/auth/customizing/
MissThee
2020-01-21 18:45:35 +08:00
感觉好像以前用 springboot,改 security 用 jwt 做验证的情况,要自己加过滤器修改一些验证流程。当时还纠结这么搞对不对,后来发现类似框架差不多都这么干。。。
ytmsdy
2020-01-21 20:21:34 +08:00
middleware 中加入 token 认证,然后将识别出来的用户放到 request.user 里面去。
yulang
2020-01-21 21:11:32 +08:00
我记得好像有一个 drf-jwt 的库,你找找
kayseen
2020-01-22 09:32:11 +08:00
@wuwukai007
@XiaoxiaoPu
@ytmsdy
@MissThee
想问下各位在 django 中使用的是 session 还是 token 呢?
我看了下中间件的源码,如果改 session 为 token 的话牵扯很多方法都要改,大家都是怎么实现认证的呢
kayseen
2020-01-22 09:32:38 +08:00
@yulang
谢谢哈,drf 中的我知道,这个是在 django 中用的
ytmsdy
2020-01-22 10:31:18 +08:00
@kayseen session 和 token 并用。如果是 API 提交上来的,那就 jwt 的认证方式来处理。
同时在登录的时候,也在 django 进行登录授权。
这样就保持了两种认证都登录成功的状态。
参考这里
https://gist.github.com/jhshengxy/241b070490569530bae586e0a97179ee
midtin
2020-01-22 12:15:41 +08:00
Marmot
2020-01-22 16:03:26 +08:00
我以前是自己替换的中间件
kayseen
2020-01-22 18:14:29 +08:00
@midtin 这个源码我看过了,这是重写用户登录方法的吧,和我说的认证并不在一起
kayseen
2020-01-22 18:15:44 +08:00
@ytmsdy
多谢多谢
kayseen
2020-01-22 18:15:55 +08:00
@Marmot 好滴,谢谢哈
alaikis
2020-01-22 21:08:06 +08:00
自己实现在一个 MIDDLEWARE 或则一个过滤器不就可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639743

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX