node微信小程序登录实现登录
好久不见兄弟们这段时间比较忙
- 需要使用到的模块
npm i axios
npm i uuid
废话少说直接上可cv(bai piao)代码
const axios = require("axios");
const uuid = require("uuid");
// 微信小程序的apikey这些
const wxKey = require("../../../main.js").wx;
// wx: {
// // 小程序 appid
// appid: "xxx",
// // 小程序 appSecret
// secret: "xxx",
// },/*** @param {code,mode} req* @param {wx.login Code} code* @param {阶段} mode* @param {*返回} reust*/
// res的code返回 200/400 直接下发用户信息/创建用户
module.exports = async (req, reust) => {// 获取从客户端上传上来的keytry {let { code } = req.body;let { appid, secret } = wxKey;let openid;if (!code) {return Promise.reject("没有code参数");}await axios.get("https://api.weixin.qq.com/sns/jscode2session", {params: {appid: appid,secret: secret,js_code: code,grant_type: "authorization_code",},}).then((response) => {if (response.data.errcode) {return Promise.reject("非法的用户凭证");}openid = response.data.openid;});// openid 这个参数在这里就已经拿到了用户的openid} catch (err) {// 出错了执行}
};
下面展示我的完整代码
const axios = require("axios");
const uuid = require("uuid");
const wxKey = require("../../../main.js").wx;
const db = require("../../../api/mysql.js");
const senf = require("../../../api/respond");
/*** @param {code,mode} req* @param {wx.login Code} code* @param {阶段} mode* @param {*返回} reust*/
// res的code返回 200/400 直接下发用户信息/创建用户
module.exports = async (req, reust) => {// 获取从客户端上传上来的keytry {let { code } = req.body;let { appid, secret } = wxKey;let openid;if (!code) {return Promise.reject("没有code参数");}await axios.get("https://api.weixin.qq.com/sns/jscode2session", {params: {appid: appid,secret: secret,js_code: code,grant_type: "authorization_code",},}).then((response) => {if (response.data.errcode) {return Promise.reject("非法的用户凭证");}openid = response.data.openid;});let userinfo = await searchUserOpenId(openid);if (userinfo.length !== 0) {reust.send(senf.init(200, userinfo[0]));} else {// 创建用户let creatUserinfoStatus = await CreateUserinfo({hash: uuid.v4(),name: "",openid: openid,avatar:"https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0",});console.log("creatUserinfoStatus", creatUserinfoStatus);reust.send(senf.init(200, creatUserinfoStatus));}console.log("userinfo", userinfo);} catch (err) {// 用户没有被创建等...console.log("err", err);reust.send(senf.init(400, err || "请检查网络环境"));}
};// 检查是否有openid如果有的话就直接查数据没有的话就弹登录
function searchUserOpenId(openid) {return new Promise((resolve, reject) => {// 查找用户let sql = db.senf.data.user.AuthUser;db.query(sql, [`%${openid}%`], (err, results) => {resolve(results);});});
}// 创建用户信息
function CreateUserinfo(userinfo) {if (userinfo.length < 5) {return Promise.reject();}console.log("userinfo", userinfo);// 创建用户return new Promise((resolve, reject) => {let sql = db.senf.data.user.createUser;// 查找用户db.query(sql,[userinfo.name,userinfo.openid,userinfo.avatar,userinfo.hash,new Date(),],(err, results) => {console.log("err", err);if (err) {reject("创建用户失败");} else {resolve(userinfo);}});});
}