django 自定义权限_如何对django api做权限限制

本文介绍了如何在Django REST API中实现权限限制,特别是使用JSON Web Token (JWT) 进行用户认证。首先,安装了django-allauth和相关依赖,然后在settings.py中配置认证系统,接着创建用户profile并修改URL路由。在ViewSet中添加认证和权限类,实现对未认证用户访问的限制。最后展示了成功认证并获取token后,API接口正常返回数据的过程。
摘要由CSDN通过智能技术生成

前面的篇章,我们搭建了django的rest api服务,那么现在,我们就需要对api来做权限限制,不能让随便一个人就可以访问api接口。一般api访问的权限限制,包括basic的验证,每次的请求头中,带有username和password,access_token验证,一般是sso生成的access_token,通过token可以拿到用户的info,请求的header里面带有authorization: "Bearer access_token"。还有jwt(json web token),请求的头中带有authorization: "JWT token"。这里,我们就采用jwt,来作为用户的权限验证。

首先,我们需要安装依赖包,django-allauth,这个库还是很强大的,集成了django自带的用户验证系统,还支持各种第三方的sso用户认证,有兴趣的可以研究一下(https://github.com/pennersr/django-allauth)。可以自定义用户登陆模板页面,添加google,wechat等等的其他社交账户认证。这里我就只支持rest api认证,所以还需要安装django-rest-auth,这个就是把系统认证导出了rest接口,可以通过api认证用户。如果需要支持json web token,我们还需要djangorestframework-jwt这个库。

ee85e3c7b45160b0a5ea115f7525d976.png

requirements.txt

安装好之后,需要修改settings.py文件,enable 认证相关的配置。

94e47e01a7582f585bf5cb2f3dd5837d.png

installed app

008b5aefe808ee542e7ecda65763f1e5.png

settings.py

接下来我们自定义了一个用户profile,可以添加更多的field,比如用户的role,来做更多的角色的限制。

b232f2f79651dd39bcb9a974651c99cb.png

models.py

接着我们需要修改root urls文件,注册rest-auth的路由。

e0c2736a6a0ca7cf6f808a54cd340542.png

urls.py

最后,我们只需要在路由具体实现里面,给viewset添加认证和权限的classes就可以了。

d6bcca0ec1cf7b787b0a891a4e421549.png

这里的permission_classes,我们只是简单了添加是否认证的判断,如果api有不同的角色用户的话,还可以对用户的role来做判断,进一步限制不同角色的用户对api的权限访问。

最后我们访问docs页面,去调用todos列表接口看一下。

9d96517f7dae61082169f16b01bd2f0f.png

我们可以看到返回401提示用户没有认证。

接着,我们来认证用户,获取token,再次调用一下。

799c161f3b5cc19bbba436373093930e.png

输入用户名密码,认证

08c9dc31dcbc0e1d2306345b33ea5c79.png

返回token信息

6a9d4b20e6d62f871b1afa5e66699e42.png

输入token验证

ca65bf0201e4bf9c565683a68c917c6b.png

带有token调用api,返回200成功。

到这,我们就对自己的api做了权限的限制。谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值