拜读了下skyvow大神的m-mall-admin后台,
https://github.com/skyvow/m-mall-admin
对于服务器端微信用户注册和登录一直没有搞明白逻辑,看了几遍代码,总算有点概念了
代码在controllers/user.js
wechatSignUp(req, res, next)
这个函数先把用户名设置成null,密码设置成123456进行md5加密后的字符串,
然后getSessionKey(code), 用code换取session_key
关于code 换取 session_key这个事情在小程序的开发文档里有说明
https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
这是一个 HTTPS 接口,开发者服务器使用登录凭证 code获取 session_key 和 openid。
session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。
返回参数:
openid 用户唯一标识
session_key 会话密钥
所以我们可以看到wechatSignUp函数体里有用到
doc.openid 就是getSessionKey返回结果的用户唯一标识openid
开发文档里又写道:错误时返回JSON数据包(示例为Code无效){"errcode":40029,"errmsg":"invalid code"}
所以函数体里可见到 doc.errcode, doc.errmsg 就是这个错误代码和错误信息了
如果返回结果里成功拿到了用户的openid
那就把body.username 设置成这个用户唯一标识 doc.openid
然后在后台数据库的user表里查找是不是已经有注册过这个用户 this.model.findByName(doc.openid)
.then(doc 如果doc不为null,说明用户名已经存在,就不要重复注册了嘛,
不然就代码接着往下走,用openid在后台数据库的user表里注册一个新用户,
用户名是openid,密码是123456
if (doc && doc._id) return res.tools.setJson(0, '注册成功', {
token: res.jwt.setToken(doc._id)
注册成功,并且设置一个token
网友评论