已知在 drf 框架中有一套完整的 jwt 鉴权机制,在请求头添加 Authorization 字段以及 token 就可以自动校验用户,然后在视图中直接使用 request.user
就可以获取当前的登录用户;
然后现在使用django
,发现官方文档只有 session 认证,如果自定义装饰器实现 token 认证的话,request.user
以及request.user.is_authenticated
就无法使用了,
问题:
1.如何在 django 中使用 token 认证
2.如何在 django 的视图中使用 request.user 获取当前用户对象(必须使用 session 认证才能使用吗?)
1
wuwukai007 2020-01-21 18:08:53 +08:00 via Android
重写 requests.user 以及 is_authenticated 方法,替换成 jwt 的认证结果,类似 is_authenticated 等价于那个 jwt 的验证方法,
|
2
wuwukai007 2020-01-21 18:10:38 +08:00 via Android
相当于打了个猴子补丁
|
3
XiaoxiaoPu 2020-01-21 18:28:30 +08:00
request.user 是通过 middleware 实现的,你自然可以实现自己的 middleware 来支持 jwt 认证。官方有相关文档: docs.djangoproject.com/en/3.0/topics/auth/customizing/
|
4
MissThee 2020-01-21 18:45:35 +08:00 via iPhone
感觉好像以前用 springboot,改 security 用 jwt 做验证的情况,要自己加过滤器修改一些验证流程。当时还纠结这么搞对不对,后来发现类似框架差不多都这么干。。。
|
5
ytmsdy 2020-01-21 20:21:34 +08:00
middleware 中加入 token 认证,然后将识别出来的用户放到 request.user 里面去。
|
6
yulang 2020-01-21 21:11:32 +08:00 via Android
我记得好像有一个 drf-jwt 的库,你找找
|
7
kayseen OP @wuwukai007
@XiaoxiaoPu @ytmsdy @MissThee 想问下各位在 django 中使用的是 session 还是 token 呢? 我看了下中间件的源码,如果改 session 为 token 的话牵扯很多方法都要改,大家都是怎么实现认证的呢 |
9
ytmsdy 2020-01-22 10:31:18 +08:00
@kayseen session 和 token 并用。如果是 API 提交上来的,那就 jwt 的认证方式来处理。
同时在登录的时候,也在 django 进行登录授权。 这样就保持了两种认证都登录成功的状态。 参考这里 https://gist.github.com/jhshengxy/241b070490569530bae586e0a97179ee |
10
midtin 2020-01-22 12:15:41 +08:00
|
11
Marmot 2020-01-22 16:03:26 +08:00
我以前是自己替换的中间件
|
15
alaikis 2020-01-22 21:08:06 +08:00
自己实现在一个 MIDDLEWARE 或则一个过滤器不就可以了
|