当前位置: 首页>编程语言>正文

django 单个API取消身份认证 django api 权限

前面的篇章,我们搭建了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这个库。




django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_django 单个API取消身份认证,第1张

requirements.txt



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




django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_json_02,第2张

installed app




django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_自定义_03,第3张

settings.py



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




django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_json_04,第4张

models.py



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




django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_django 单个API取消身份认证_05,第5张

urls.py



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




django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_json_06,第6张


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

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


django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_自定义_07,第7张


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

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


django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_django 自定义权限_08,第8张

输入用户名密码,认证


django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_自定义_09,第9张

返回token信息


django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_django 单个API取消身份认证_10,第10张

输入token验证


django 单个API取消身份认证 django api 权限,django 单个API取消身份认证 django api 权限_json_11,第11张

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


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


https://www.xamrdz.com/lan/57c1951276.html

相关文章: