难以想象如果一个Django应用没有用户认证,我们用一个简单的认证流程来解释一下Django和React的协作进行用户认证的过程。
第一部分用JWT token认证创建一个简单的Django后端。第二部分展示如何创建React/Redux前端,第三部分介绍如何应用JWT去刷新token。
最终你可以看到一个以django为后端,react/redux为前端的小应用。
什么是JWT
json web token是一种无状态的认证方法。生成的token只保存在客户端。一个JWT token本身可能包含了用户名,邮箱或者用户权限。
JWT可以提供两种类型的token,一种是长期刷新的token(用于token过期之后的重新获取),一种是短期访问的token(用于调用API服务)
建立后端代码
首先用virtualenv建立新的环境,并安装相关库
1 | $ mkdir backend/ && cd backend/ |
安装的coreapi库用于自动生成api的模式,用于描述有什么资源可以用,urls是什么,支持什么操作,如何去展现结果。
django-rest-framework-simplejwt 库用于执行JWT认证
然后在config/settings.py
中配置:
1 | INSTALLED_APPS = [ |
加入rest_framework
到INSTALLED_APPS
当中,用IsAuthenticated
来保护所有的api访问权限,用JWTAuthentication
和SessionAuthentication
来保护认证的视图
修改config/urls.py
:
1 | from django.conf.urls import url, include |
这里使用了get_schema_view
去是的api视图可用,TokenObtainPairView
和TokenRefreshView
完成JWT认证的作用
为了简单,我们把echo API部分直接放在config/urls.py
中
1 | class MessageSerializer(serializers.Serializer): |
现在可以运行django代码
1 | $ ./manage.py migrate |