node微信小程序登錄實(shí)現(xiàn)登錄的項(xiàng)目實(shí)踐
好久不見(jiàn)兄弟們這段時(shí)間比較忙
需要使用到的模塊
npm i axios npm i uuid
廢話少說(shuō)直接上可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 直接下發(fā)用戶信息/創(chuàng)建用戶
module.exports = async (req, reust) => {
// 獲取從客戶端上傳上來(lái)的key
try {
let { code } = req.body;
let { appid, secret } = wxKey;
let openid;
if (!code) {
return Promise.reject("沒(méi)有code參數(shù)");
}
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 這個(gè)參數(shù)在這里就已經(jīng)拿到了用戶的openid
} catch (err) {
// 出錯(cuò)了執(zhí)行
}
};下面展示我的完整代碼
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 直接下發(fā)用戶信息/創(chuàng)建用戶
module.exports = async (req, reust) => {
// 獲取從客戶端上傳上來(lái)的key
try {
let { code } = req.body;
let { appid, secret } = wxKey;
let openid;
if (!code) {
return Promise.reject("沒(méi)有code參數(shù)");
}
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 {
// 創(chuàng)建用戶
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) {
// 用戶沒(méi)有被創(chuàng)建等...
console.log("err", err);
reust.send(senf.init(400, err || "請(qǐng)檢查網(wǎng)絡(luò)環(huán)境"));
}
};
// 檢查是否有openid如果有的話就直接查數(shù)據(jù)沒(méi)有的話就彈登錄
function searchUserOpenId(openid) {
return new Promise((resolve, reject) => {
// 查找用戶
let sql = db.senf.data.user.AuthUser;
db.query(sql, [`%${openid}%`], (err, results) => {
resolve(results);
});
});
}
// 創(chuàng)建用戶信息
function CreateUserinfo(userinfo) {
if (userinfo.length < 5) {
return Promise.reject();
}
console.log("userinfo", userinfo);
// 創(chuàng)建用戶
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("創(chuàng)建用戶失敗");
} else {
resolve(userinfo);
}
}
);
});
}到此這篇關(guān)于node微信小程序登錄實(shí)現(xiàn)登錄的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)node小程序登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于uniapp與node.js實(shí)現(xiàn)的微信授權(quán)登錄功能實(shí)例
- node+vue前后端分離實(shí)現(xiàn)登錄時(shí)使用圖片驗(yàn)證碼功能
- NodeJS實(shí)現(xiàn)單點(diǎn)登錄原理解析
- NodeJs+MySQL實(shí)現(xiàn)注冊(cè)登錄功能
- Node.js實(shí)現(xiàn)登錄注冊(cè)功能
- node.js實(shí)現(xiàn)簡(jiǎn)單登錄注冊(cè)功能
- Node登錄權(quán)限驗(yàn)證token驗(yàn)證實(shí)現(xiàn)的方法示例
- 圖解NodeJS實(shí)現(xiàn)登錄注冊(cè)功能
- nodejs實(shí)現(xiàn)用戶登錄路由功能
- 快速搭建Node.js(Express)用戶注冊(cè)、登錄以及授權(quán)的方法
相關(guān)文章
jwt在express中token的加密解密實(shí)現(xiàn)過(guò)程
文章詳細(xì)介紹了JWT在Node.js中的生成和驗(yàn)證過(guò)程,包括設(shè)置密鑰、使用中間件進(jìn)行token驗(yàn)證等步驟,并提供了一個(gè)完整的示例代碼,感興趣的朋友跟隨小編一起看看吧2025-01-01
使用nodejs實(shí)現(xiàn)JSON文件自動(dòng)轉(zhuǎn)Excel的工具(推薦)
這篇文章主要介紹了使用nodejs實(shí)現(xiàn),JSON文件自動(dòng)轉(zhuǎn)Excel的工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Node.js匹配文件夾所有文件關(guān)鍵字的完整教程
本文基于nodejs構(gòu)建一個(gè)自動(dòng)化檢測(cè)工具:讀取 Excel 中的關(guān)鍵字,在指定目錄的所有文件中搜索是否存在對(duì)應(yīng)內(nèi)容,最終生成帶標(biāo)記結(jié)果的 Excel 文件,需要的朋友可以參考下2025-04-04
Nodejs極簡(jiǎn)入門(mén)教程(二):定時(shí)器
這篇文章主要介紹了Nodejs極簡(jiǎn)入門(mén)教程(二):定時(shí)器,本文講解了setTimeout、setInterval、setImmediate及process.nextTick等內(nèi)容,需要的朋友可以參考下2014-10-10
node.js 基于cheerio的爬蟲(chóng)工具的實(shí)現(xiàn)(需要登錄權(quán)限的爬蟲(chóng)工具)
這篇文章主要介紹了node.js 基于cheerio的爬蟲(chóng)工具的實(shí)現(xiàn)(需要登錄權(quán)限的爬蟲(chóng)工具) ,需要的朋友可以參考下2019-04-04
vscode安裝教程以及配置node.js環(huán)境全過(guò)程
這篇文章主要給大家介紹了關(guān)于vscode安裝教程以及配置node.js環(huán)境的相關(guān)資料,VSCode是一款由微軟開(kāi)發(fā)的輕量級(jí)編輯器,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
node puppeteer(headless chrome)實(shí)現(xiàn)網(wǎng)站登錄
這篇文章主要介紹了node puppeteer(headless chrome)實(shí)現(xiàn)網(wǎng)站登錄,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
爬蟲(chóng)利器Puppeteer實(shí)戰(zhàn)
本文詳細(xì)的介紹了什么是Puppeteer以及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01

