node微信小程序登錄實(shí)現(xiàn)登錄的項(xiàng)目實(shí)踐
好久不見兄弟們這段時(shí)間比較忙
需要使用到的模塊
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 直接下發(fā)用戶信息/創(chuàng)建用戶 module.exports = async (req, reust) => { // 獲取從客戶端上傳上來的key try { let { code } = req.body; let { appid, secret } = wxKey; let openid; if (!code) { return Promise.reject("沒有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) => { // 獲取從客戶端上傳上來的key try { let { code } = req.body; let { appid, secret } = wxKey; let openid; if (!code) { return Promise.reject("沒有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) { // 用戶沒有被創(chuàng)建等... console.log("err", err); reust.send(senf.init(400, err || "請(qǐng)檢查網(wǎng)絡(luò)環(huán)境")); } }; // 檢查是否有openid如果有的話就直接查數(shù)據(jù)沒有的話就彈登錄 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)簡單登錄注冊(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)文章
Node.js 文件夾目錄結(jié)構(gòu)創(chuàng)建實(shí)例代碼
下面小編就為大家?guī)硪黄狽ode.js 文件夾目錄結(jié)構(gòu)創(chuàng)建實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-07Node.js 中 http 模塊的深度剖析與實(shí)戰(zhàn)應(yīng)用小結(jié)
本文詳細(xì)介紹了Node.js中的http模塊,從創(chuàng)建HTTP服務(wù)器、處理請(qǐng)求與響應(yīng),到獲取請(qǐng)求參數(shù),每個(gè)環(huán)節(jié)都通過代碼示例進(jìn)行解析,旨在幫助開發(fā)者熟練掌握http模塊,構(gòu)建高效的網(wǎng)絡(luò)應(yīng)用,感興趣的朋友一起看看吧2025-01-01Node.js實(shí)用代碼段之獲取Buffer對(duì)象字節(jié)長度
這篇文章主要介紹了Node.js實(shí)用代碼段之獲取Buffer對(duì)象字節(jié)長度,需要的朋友可以參考下2016-03-03Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決
這篇文章主要介紹了Nodejs?http模塊返回內(nèi)容中文亂碼問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12如何降低node版本,怎樣實(shí)現(xiàn)降低node版本
這篇文章主要介紹了如何降低node版本,怎樣降低node版本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Nodejs關(guān)于gzip/deflate壓縮詳解
本文主要向大家介紹了nodejs中關(guān)于gzip/deflate壓縮的2種方法,分別是管道壓縮和非管道壓縮,十分詳細(xì),并附帶示例,這里推薦給大家參考下。2015-03-03Electron如何通過ffi-napi調(diào)用dll導(dǎo)出接口
文章介紹了如何在Electron項(xiàng)目中使用ffi-napi模塊調(diào)用DLL文件,并詳細(xì)描述了環(huán)境搭建、安裝Electron和ffi-napi、配置Visual Studio和Python環(huán)境、解決常見問題等步驟,感興趣的朋友跟隨小編一起看看吧2025-02-02Node.js?中的服務(wù)器相關(guān)概念(常見的服務(wù)器任務(wù))
Node.js?中,服務(wù)器的創(chuàng)建與管理是非常重要的內(nèi)容,Node.js?的非阻塞?I/O?特性使得它特別適合處理高并發(fā)的請(qǐng)求,本文將介紹一些與?Node.js?服務(wù)器相關(guān)的基本概念,包括?HTTP?服務(wù)器、請(qǐng)求和響應(yīng)、路由、以及如何處理常見的服務(wù)器任務(wù),感興趣的朋友一起看看吧2025-04-04