tips: 本文面向的对象是已经会使用django开发web后端的人员
微信小程序后端与普通web的区别
微信小程序的后端开发和普通的restful API 大致上相同,只不过要注意以下几点限制必须使用HTTPS协议请求后端服务器
不支持COOKIE
不支持django内置的user登录, 因为它使用的是微信的用户系统
应对方法对于HTTPS的限制, 很简单, 去godaddy等网站申请一个https证书, 下载后使用nginx指定即可, 可以参照此文章, 这篇文章的证书是自己生成的, 这里需要替换为申请的证书
不支持cookie, django原生的session机制就会失效
不支持django内置的user登录, 因为它使用的是微信的用户系统
对于上边这两个问题,我使用了JWT来保证了用户的在线验证. 那么什么是JWT呢, 可以看下推酷的这篇文章了解一下, 简要的来说就是用户登录以后, 原先保存在cookie里边的一个随机的sessionid变成了保存在http头部的Authorization字段的一个token值, 这个值是服务端自身加密的, 客户端无需解密, 只要服务端知道这个token对应这个用户就好, 当然这里也有很多的附加功能, 比如超时等等, 不再赘述
然而网上有很多的jwt开源项目, 比如django-jwt, rest-framework-jwt, 你都可以使用, 但是却不适用于微信小程序, 为什么这么说? 是因为这两个项目都和django内置的user相耦合, 在上边提出的第三个问题的地方会引起问题, 在尝试了rest-framework-jwt发现问题后, 我毅然决定自己使用pyjwt实现一个用户登录/鉴权的组件.
首先要知道微信小程序的登录流程是:客户端请求用户授权
用户授权成功
客户端或得到用户基本信息(包括code,没有openid的用户明文信息, 有openid的加密后的信息, 解密向量iv)
客户端把返回的信息发送到服务