继续编辑绑定微信帐户的接口 .. 接口的一开始,先执行一下 db.read() 重载一下数据文件 .. 下面把请求主体里的一些数据解构出来 .. username .. password .. wxUserInfo .. 还有 code .. 来自请求的主体 ..
接口先要做的是查询一下请求里的用户名在我们的应用里是不是存在 .. 添加一个 user .. 用 getUserByName .. 用户名是 username ..
如果按用户名没找到用户 .. 就做出一个响应 .. 状态码是 404 .. 响应的信息是 用户名不存在 .. 下面再 return ..
确定了用户名真的存在以后,可以立即去验证用户的密码 .. 添加一个 passwordMatch .. await 执行 bcrypt .. compare .. 比较 password .. 对比的是 user 里的 password ..
如果密码不匹配 .. 就做出响应 .. 状态码设置成 403 .. 响应的信息是 密码不对 .. 做出响应之后直接 return ..
确定过用户存在,密码也匹配 .. 再检查一下用户是不是已经绑定了微信 .. 这里用 lodash 里的 has 检查 user 对象,看看它里面有没有 weixin.openid .. 如果有 .. 做出一个响应 .. 设置一下状态码还有响应的文字 .. 这个用户已经绑定了微信 .. 然后 return ..
在文件的顶部 .. 添加一个 _ .. 来自 lodash 模块 ..
继续再编辑绑定接口 ..
确定了用户存在,密码匹配,也没有绑定微信帐户,下面要做的是获取微信用户的会话 .. 添加一个 sessionData .. 用一下之前我们自己定义的 getWxSession ,把登录凭证交给这个函数 ..
下面添加一个 openidIsUsed .. 执行 getUserByOpenId .. 把 openid 的值交给这个函数 .. 如果 openidIsUsed .. 说明这个微信帐户已经跟应用里的其他用户绑定在一起了 ..
做出一个 400 状态的响应 .. 设置一下响应的文字 . 然后 return ..
一切正常,就可以把用户微信用户相关的信息存储到用户帐户的下面 .. 添加一个 weixin .. 里面有 openid .. 对应的值是 sessionData 里的 openid ..
再添加一个 userInfo .. 它的值是 wxUserInfo 里的 userInfo ..
下面执行一下 db.get .. 得到 users .. 找到用户名的值是 user 里的 username 的用户 .. 找到以后,用 assign ,往这个用户帐户里面添加点东西,添加的是 weixin ,对应的值就是上面定义的 weixin .. 它里面会有用户的 openid 还有微信帐户信息 ..
再执行 write 方法写入数据文件 ..
最后直接让用户登录 .. 添加一个 token ... 用 signToken ,把 user 交给它 .. 下面做出响应 .. 响应里的 id .. 值是 user.id .. 还有 username ,值是 user.username .. 还有一个签发的 token ..
改进 wx-bind
微信登录接口需要再改进一下 .. 一开始要执行 db.read .. 重载数据文件 .. 做出响应之后可以执行 return ..
回到模拟器 .. 测试一下 ..
按一下微信登录 .. 然后执行绑定 .. 得到的响应是 用户名不存在 ..
输入用户名 .. 一个错误的密码 .. 执行绑定 .. 响应里的数据是 密码不对 ..
输入一个正确的密码 .. 再绑定一下 .. 正常的话,得到的响应里面会包含签发的 token ..
再执行一下绑定 ..
会提示这个用户已经绑定了微信帐户 ..