node微信小程序登录实现登录
好久不见兄弟们这段时间比较忙文章来源地址https://www.toymoban.com/news/detail-706215.html
- 需要使用到的模块
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) => {
// 获取从客户端上传上来的key
try {
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) => {
// 获取从客户端上传上来的key
try {
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);
}
}
);
});
}
文章来源:https://www.toymoban.com/news/detail-706215.html
到了这里,关于node微信小程序登录实现登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!