uniapp 小程序实现微信授权登录(前端和后端)_微信小程序授权登录后端如何实现

最后

喜欢的话别忘了关注、点赞哦~

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

前端校招面试题精编解析大全

    async onLogin() {
      //获取用户信息 (头像和名称)
      const [, userProfile] = await uni.getUserProfile({
        desc: "获取用户信息",
        lang: "zh\_CN",
      });
      if (userProfile) {
        //调用微信登录接口获取临时code 
        const [, loginInfo] = await uni.login({ provider: "weixin" });
        if (loginInfo) {
         // 登录临时code
          const { code } =  loginInfo;
          const {userInfo: { avatarUrl, nickName }} = userProfile;
          // 组装后端接口需要的数据
          const params = {code, avatarUrl, userName: nickName};
          // 调用登录接口
          const { data } = await wxLogin(params);
          uni.setStorageSync(USER\_TOKEN, data.token);
          this.$store.commit("SET\_USER\_INFO", data);
          this.$api.msg("登陆成功");
        }
      }
    },

2.后端:需要通过调用微信提供的第三方接口来实现

1.主要流程:在前端调用接口成功的将临时code 传递给后端时 ,后端通过调用微信的第三方接口拿到 openid, session_key 这两个参数,查询数据库是否有 openid 如果有则更新 session_key ,如果没有则在数据库中新建一条用户信息的数据
2.后端代码(node.js)
/\*\* 
 @description 微信登录
 \* @param {String} code 
 \* @type {POST}
 \* @return 
\*/
router.post('/wxLogin', async (req, res, next) => {
  try {
    const { code, avatarUrl, userName } = req.body
    let token = Token.tokenSet()
    // 当前微信开发者的appId
    const appId = 'wx66dee29d470c6095'
    const appSecret = '79ee1240fa1ee8f67066d67fa7692e21';
    // 微信登录的第三方接口
    const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js\_code=${code}&grant\_type=authorization\_code`
    //调用微信登录第三方接口
    const { data: { openid, session_key } } = await axios({ url, method: 'get' })
     //更新当前用户的信息
    const updateInfo = await db.findOneAndUpdate({ openId: openid }, { $set: { sessionKey: session_key, token,avatarUrl,userName } })
    if (updateInfo) {
      const userInfo = await db.findOne({openId: openid})
      return res.jsonp({ code: 1, message: '登录成功', data: userInfo})
    } else {
      //如果当前用户没有登录则插入一条新的用户信息
      const insertInfo = { openId: openid, sessionKey: session_key, userType: 2, status: 1, token, userName,avatarUrl }
      const userInfo = await db.findOne({openId: openid})


### 最后

喜欢的话别忘了关注、点赞哦~

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

> ![前端校招面试题精编解析大全](https://img-blog.csdnimg.cn/img_convert/8c2b6497eec78b688390f85749032a70.png)



  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值