在使用django框架开发小程序时,会遇到一些认证问题,比如微信小程序不支持账户名、密码登录,也不支持session登录,故采用Django作为后台时,一种可行的方法就是使用JWT登录。
本文采用的是Simple JWT来实现
安装
pip install djangorestframework-simplejwt
配置项目settings
在restful_framework的配置:
# settings.py 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', 'rest_framework.authentication.TokenAuthentication', 'rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication', )
主要是加上rest_framework_simplejwt.authentication.JWTAuthentication
这样django会自动检查是否带有token。
配置UR
配置好url,在我的项目里是用来测试JWT能否正常登录用的,官方文档里有如下方法
# urls.py from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenVerifyView urlpatterns = [ ... path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), path('token/verify/', TokenVerifyView.as_view(), name='token_verify'), ]进行测试的代码如下(也可以用来展示用法):
def test_get_token(self): url = '/web-api/token/' response = self.client.post(url, user_info, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) content = json.loads(response.content) self.assertIn('access', content) self.assertIn('refresh', content) def test_authorization(self): auth_url = '/web-api/token/' response = self.client.post(auth_url, user_info, format='json') access_token = json.loads(response.content)['access'] verification_url = '/web-api/recite/' client = APIClient() client.credentials(HTTP_AUTHORIZATION=f'Bearer {access_token}') response = client.get(verification_url) content = json.loads(response.content) self.assertEqual(content['code'], status.HTTP_200_OK)
在接口中实现登录(返回Token)
先定义一个JWTTokenObtainPairSerializer,继承自TokenObtainPairSerializer,实现get_token方法
# serializers.py from rest_framework_simplejwt.serializers import TokenObtainPairSerializer class JWTTokenObtainPairSerializer(TokenObtainPairSerializer): @classmethod def get_token(cls, user): token = super(JWTTokenObtainPairSerializer, cls).get_token(user) token['username'] = 'wx_{0}'.format(user.username) return token在小程序登录的接口添加如下代码即可将token返回
# viewset.py user = update_or_create_wx_user(openid, user_info) # noqa token = JWTTokenObtainPairSerializer.get_token(user).access_token serializer = self.get_serializer(user) result = { 'userInfo': serializer.data, 'token': str(token), } res = { 'code': 200, 'result': result, } return Response(res)
小程序端获取到token后,塞入header即可实现账号的登录认证。Django会根据token自动获取user。
以上就是“django框架开发小程序如何处理认证问题(django框架实战开发小程序)”的详细内容,想要了解更多django框架内容欢迎持续关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/10074/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取