• node微信小程序登录实现登录


    node微信小程序登录实现登录

    好久不见兄弟们这段时间比较忙

    • 需要使用到的模块
    npm i axios
    npm i uuid
    
    • 1
    • 2

    废话少说直接上可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) {
    		// 出错了执行
    	}
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    下面展示我的完整代码

    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);
    				}
    			}
    		);
    	});
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
  • 相关阅读:
    【web前端】JavaScript 笔记小结(Day 2)
    详解Java的static关键字
    数据结构复习题(二)
    Java项目:SSM农产品朔源管理系统
    音视频进阶教程-实现直播SEI补充增强信息
    随机数生成器代码HTML5
    跟羽夏学 Ghidra ——数据
    layui(3)——内置模块弹出层
    Unity 编辑器资源导入处理函数 OnPostprocessTexture :深入解析与实用案例
    C++~类和对象总结(万字大总结,值得收藏)
  • 原文地址:https://blog.csdn.net/weixin_50112395/article/details/132804559