uniapp 小步调实现微信授权登录(前端和后端)

[复制链接]
发表于 2026-2-9 11:44:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
                       
原文链接:https://blog.csdn.net/weixin_43835425/article/details/131147690
掘金地点:https://juejin.cn/post/7290371873547583548
1.前端:通过 uni.getUserProfile 和 uni.login 来实现
1.重要流程:先通过 uni.getUserProfile授权获取用户名称和头像等信息 在调用 uni.login 获取微信登录必要的暂时code
2. 前端代码
  1.     async onLogin() {
  2.       //获取用户信息 (头像和名称)
  3.       const [, userProfile] = await uni.getUserProfile({
  4.         desc: "获取用户信息",
  5.         lang: "zh_CN",
  6.       });
  7.       if (userProfile) {
  8.         //调用微信登录接口获取临时code
  9.         const [, loginInfo] = await uni.login({ provider: "weixin" });
  10.         if (loginInfo) {
  11.          // 登录临时code
  12.           const { code } =  loginInfo;
  13.           const {userInfo: { avatarUrl, nickName }} = userProfile;
  14.           // 组装后端接口需要的数据
  15.           const params = {code, avatarUrl, userName: nickName};
  16.           // 调用登录接口
  17.           const { data } = await wxLogin(params);
  18.           uni.setStorageSync(USER_TOKEN, data.token);
  19.           this.$store.commit("SET_USER_INFO", data);
  20.           this.$api.msg("登陆成功");
  21.         }
  22.       }
  23.     },
复制代码
2.后端:必要通过调用微信提供的第三方接口来实现
1.重要流程:在前端调用接口乐成的将暂时code 转达给后端时 ,后端通过调用微信的第三方接口拿到 openid, session_key 这两个参数,查询数据库是否有 openid 假如有则更新 session_key ,假如没有则在数据库中新建一条用户信息的数据
2.后端代码(node.js)
  1. /**
  2.    @description 微信登录
  3.   * @param {String} code
  4.   * @type {POST}
  5.   * @return
  6. */
  7. router.post('/wxLogin', async (req, res, next) => {
  8.   try {
  9.     const { code, avatarUrl, userName } = req.body
  10.     let token = Token.tokenSet()
  11.     // 当前微信开发者的appId
  12.     const appId = 'wx66dee29d470c6095'
  13.     const appSecret = '79ee1240fa1ee8f67066d67fa7692e21';
  14.     // 微信登录的第三方接口
  15.     const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`
  16.     //调用微信登录第三方接口
  17.     const { data: { openid, session_key } } = await axios({ url, method: 'get' })
  18.      //更新当前用户的信息
  19.     const updateInfo = await db.findOneAndUpdate({ openId: openid }, { $set: { sessionKey: session_key, token,avatarUrl,userName } })
  20.     if (updateInfo) {
  21.       const userInfo = await db.findOne({openId: openid})
  22.       return res.jsonp({ code: 1, message: '登录成功', data: userInfo})
  23.     } else {
  24.       //如果当前用户没有登录则插入一条新的用户信息
  25.       const insertInfo = { openId: openid, sessionKey: session_key, userType: 2, status: 1, token, userName,avatarUrl }
  26.       const userInfo = await db.findOne({openId: openid})
  27.       await db.insertMany(insertInfo)
  28.       return res.jsonp({ code: 1, message: '登录成功', data: userInfo})
  29.     }
  30.   } catch {
  31.     next({ message: '接口错误' })
  32.   }
  33. })
复制代码
 
完备的代码逻辑可参考
前端:https://gitee.com/ZHANG_6666/uni-app/blob/master/pages/myCenter/myCenter.vue
后端:https://gitee.com/ZHANG_6666/express–vue3–ant-design2/blob/master/routes/users.js
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表