node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > node小程序登录

node微信小程序登录实现登录的项目实践

作者:阿山同学.

登陆流程是指小程序用户进行授权登陆,即获取用户的微信账号等信息本文就来介绍一下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) => {
	// 获取从客户端上传上来的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);
				}
			}
		);
	});
}

到此这篇关于node微信小程序登录实现登录的项目实践的文章就介绍到这了,更多相关node小程序登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文