uniapp 微信小程序 授权 登录

Uniapp 微信小程序 授权登录教程

在开发微信小程序时,用户授权登录是非常重要的一环。通过授权登录,开发者可以获取用户的基本信息,从而为用户提供更加个性化的服务。本文将介绍如何在Uniapp中实现微信小程序的授权登录,并提供详细的代码示例和注释。

一、准备工作
  1. 注册微信小程序并获取AppID和AppSecret: 你需要在微信公众平台注册一个小程序账号,并获取AppID和AppSecret。这些信息将在我们进行授权登录时使用。

  2. 配置Uniapp项目: 在你的Uniapp项目中,打开manifest.json文件,找到并填写微信小程序的AppID。

    "mp-weixin" : {
        "appid" : "你的AppID",
        "setting": {
            "urlCheck": false
        },
        "libVersion": "2.9.0",
        "style": "v2",
        "subPackages": false
    }
    
  3. 配置微信小程序的合法域名: 登录微信公众平台,进入小程序后台,在“开发”->“开发设置”中配置服务器域名,确保域名已在微信的合法域名列表中

二、实现授权登录
  1. 在页面中添加登录按钮

    在你的小程序页面中添加一个用于触发登录的按钮,例如在pages/index/index.vue中:

    <template>
      <view>
        <button open-type="getUserInfo" @getuserinfo="getUserInfo">微信登录</button>
      </view>
    </template>
    
  2. 在页面脚本中处理授权逻辑

    在页面脚本部分,我们需要编写逻辑以处理用户的授权信息。

    <script>
    export default {
      data() {
        return {
          userInfo: null,
          hasUserInfo: false
        }
      },
      methods: {
        // 获取用户信息
        getUserInfo(e) {
          if (e.mp.detail.userInfo) {
            this.userInfo = e.mp.detail.userInfo;
            this.hasUserInfo = true;
            this.login();
          } else {
            uni.showModal({
              title: '警告',
              content: '您点击了拒绝授权,将无法进入小程序,请授权之后再进入!',
              showCancel: false,
              confirmText: '返回授权',
              success: function(res) {
                if (res.confirm) {
                  console.log('用户点击了“返回授权”');
                }
              }
            });
          }
        },
        // 登录并获取用户信息
        login() {
          uni.login({
            provider: 'weixin',
            success: (loginRes) => {
              // 登录成功,获取用户code
              const { code } = loginRes;
              // 发送code到后台换取openId, sessionKey, unionId
              uni.request({
                url: 'https://你的服务器地址/api/login', // 你的登录API地址
                method: 'POST',
                data: {
                  code
                },
                success: (res) => {
                  if (res.data && res.data.success) {
                    const { openId, sessionKey, unionId } = res.data;
                    // 将用户信息和session存储到本地
                    uni.setStorageSync('userInfo', this.userInfo);
                    uni.setStorageSync('openId', openId);
                    uni.setStorageSync('sessionKey', sessionKey);
                    uni.setStorageSync('unionId', unionId);
                  } else {
                    uni.showToast({
                      title: '登录失败',
                      icon: 'none'
                    });
                  }
                },
                fail: () => {
                  uni.showToast({
                    title: '请求失败',
                    icon: 'none'
                  });
                }
              });
            },
            fail: (err) => {
              console.log('uni.login 接口调用失败,将无法正常使用开放接口等服务', err);
              uni.showToast({
                title: '登录失败',
                icon: 'none'
              });
            }
          });
        }
      }
    }
    </script>
    

三、后端服务器处理

在你的服务器上,你需要处理从微信获取到的code,并通过微信接口换取用户的openIdsessionKeyunionId

示例代码(Node.js):

const express = require('express');
const request = require('request');
const app = express();

const APPID = '你的AppID';
const APPSECRET = '你的AppSecret';

app.use(express.json());

app.post('/api/login', (req, res) => {
  const { code } = req.body;

  if (!code) {
    return res.status(400).json({ success: false, message: '缺少code参数' });
  }

  const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${APPSECRET}&js_code=${code}&grant_type=authorization_code`;

  request.get(url, (err, response, body) => {
    if (err) {
      return res.status(500).json({ success: false, message: '请求微信接口失败' });
    }

    const data = JSON.parse(body);

    if (data.errcode) {
      return res.status(400).json({ success: false, message: data.errmsg });
    }

    res.json({
      success: true,
      openId: data.openid,
      sessionKey: data.session_key,
      unionId: data.unionid
    });
  });
});

app.listen(3000, () => {
  console.log('服务器启动成功,监听端口3000');
});
四、总结

通过以上步骤,我们实现了一个简单的微信小程序授权登录功能。完整的流程包括:

  1. 用户点击微信登录按钮,触发getUserInfo事件。
  2. getUserInfo事件中,调用uni.login获取用户的code
  3. code发送到服务器,服务器通过微信接口换取用户的openIdsessionKeyunionId
  4. 将用户信息存储到本地,以便后续使用。

以上示例代码仅供参考,实际开发中可能需要根据具体需求进行调整和完善。希望本文能对你在开发微信小程序授权登录功能时有所帮助。

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值