最简单通用的权限校验模型:
- 验证是否合法。
- 验证是否有效。
-
验证 token 对应的权限。
我们借助微信的权限验证体系,不需要自己传递账号密码,相应的是小程序会为每一个登录的用户生成一个 code 码,需要将 code 码传向 getToken 接口。code 码是去微信服务器换取用户标识的凭证。我们在 getToken 中接收到 code 码之后就需要想服务器发送一个请求,将 code 码传递给微信服务器,获取到 openid 和 session_key。openid 就是身份用户的唯一标识。而 session_key 可以用来解密从服务器拿到的加密信息。之所以要解密,是因为里面包含一个变量,叫做 unionid,unionid 也是用户的唯一标识,但是与 openid 的区别是:不同微信小程序同一个账户的 openid 不同,而 unionid 相同。unionid 经常用于不同小程序之间的关联。
我们接下来需要存储 openid,由于该标识不具有时效期,安全性差,不能将 openid 直接返回到小程序。解决方法就是生成一个有时效期的 Token 令牌,将令牌返回至客户端。下一次用户访问时,需要携带令牌,间接地拿到 openid。
如果把 openid 和 Token 令牌全都记录在数据库里,每次访问 API 都需要携带,每次查询数据库会增大数据库的压力,为了减少数据库的压力,我们可以用数据库存储 openid,而 Token 令牌则缓存到本地,可以节约数据库资源,也可以加快用户的访问速度。但是我们要注意,缓存的维护十分困难,需要合理的使用缓存。
在有了之前的架构之后,访问下单接口的 API 时就非常容易了。