微信小程序python用户认证的实现

  

这里用到django-rest-framework-jwt这个库,,https://github.com/GetBlimp/django-rest-framework-jwt

  

微信小程序python用户认证的实现

  

<强>按流程图来

  

先通过wx.login()获取代码,再通过我们后台配置的接口获取openid和session_key

     //登录   wx.login ({   成功:res=比;{   console.log (res)//发送res.code到后台换取openId, sessionKey unionId   wx.request ({   url: api。GET_OPENID,//数据:{   js_code: res.code   },   成功:函数(res) {   var openid=res.data.openid   var session_key=res.data.session_key//获取openid, session_key//后台用户表保存   wx.request ({   url: api.USER,   方法:“文章”,   数据:{   openid: openid,   session_key: session_kay   },   成功:函数(res) {   如果(res.data。状态==晒Α?{//在缓存中保存用户id和openid备用   wx.setStorage ({   关键:“标识”,   数据:res.data.userid,   });   wx.setStorage ({   关键:“openid”,   数据:openid,   })   其他}{   wx.showModal ({   标题:“提示”,   showCancel:假的,   内容:“获取openid失败”,   })   }   }   })   }   })   }   })      

在这里的用户表最好是在django自带的用户表上进行字段拓展,不然重写起来会很麻烦,拓展方法如下
  

        从django.contrib.auth。模型导入AbstractUser      #创建您的模型。   类用户(AbstractUser):   ”“”   用户新增字段   ”“”   name=模型。null=True CharField (max_length=30日,空白=True, verbose_name=靶彰?      之前      

下面是django的用户默认字段,需要保存用户头像,用户省市等字段只要在原有基础上新增即可

  

微信小程序python用户认证的实现

  

<强>生成第三届

  

先在后台配置jwt
  

  

安装<代码> pip安装djangorestframework-jwt
  

  

在你的设置。py,添加JSONWebTokenAuthentication到Django其他框架DEFAULT_AUTHENTICATION_CLASSES。
  

        REST_FRAMEWORK={   “DEFAULT_PERMISSION_CLASSES”:(   “rest_framework.permissions.IsAuthenticated”,   ),   “DEFAULT_AUTHENTICATION_CLASSES”:(   “rest_framework_jwt.authentication。JSONWebTokenAuthentication”, # & lt; - - - - - - -   “rest_framework.authentication.SessionAuthentication”,   “rest_framework.authentication.BasicAuthentication”,   ),   }      # JWT设置过期时间,具体配置查看文档   JWT_AUTH={   “JWT_VERIFY_EXPIRATION”:假的   }      #在您urls . py添加以URL下路由以启用通过帖子获取令牌包括用户的用户名和密码。      从rest_framework_jwt。视图导入obtain_jwt_token   #...      urlpattern=[   ”,   #……      url (r ' ^ api-token-auth/', obtain_jwt_token),   )      

通过帖子用户的用户名和密码获取令牌
  

        wx.request ({   url: api.api-token-auth,//url配置   方法:“文章”,   数据:{   “用户名”:openid,//这里我是用openid当作用户名   “密码”:session_key//用session_key当作密码   },   成功:函数(jwt) {//jwt格式:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InhpZWhhbyIsImV4cCI6MTUzNTM3ODQ2OCwiZW1haWwiOiIzNDg2OTg1ODhAcXEuY29tIn0.8rXFK_K2q8474LxYrCuuNJT93PkZMzi1JX6fVproXrE//前面是base64后面是签的名,用。隔开//将jwt_token放入缓存备用   var jwt_token=jwt.data.token   wx。setStorageSync (jwt_token, jwt_token)   self.globalData。jwt_token=jwt_token   }   })   之前      

后端配置时需要加上authentication_classes进行认证
  

        从rest_framework。权限导入IsAuthenticated   从rest_framework_jwt。身份验证导入JSONWebTokenAuthentication      #商品表   类goodsViewSet (viewsets.ModelViewSet):   queryset=Goods.objects.all ()   serializer_class=goodsSerializers   filter_class=GoodsFilter   filter_backends=(DjangoFilterBackend filters.SearchFilter)   search_fields=(“名字”,)   #认证配置   permission_classes=(IsAuthenticated,)   authentication_classes=(JSONWebTokenAuthentication,)      

微信小程序python用户认证的实现