前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uniapp写登陆|微信小程序登录和微信h5登录

uniapp写登陆|微信小程序登录和微信h5登录

作者头像
肥晨
发布2024-07-25 11:12:20
1070
发布2024-07-25 11:12:20
举报
文章被收录于专栏:农民工前端

导文

微信小程序登录怎么实现? 微信h5登录怎么实现? 用uniapp写同一个页面,怎么实现都通用呢?

微信小程序登录

先写一个样式

代码语言:javascript
复制
  <button type="default" @click="handerdl">登陆</button>

在网页中创建一个可点击的按钮,创建一个回调函数handerdl

代码实现

以下代码包含了登录逻辑和根据不同平台存储 token 的代码:

代码语言:javascript
复制
handerdl() {
  wx.login({
    success(res) {
      if (res.code) {
        // 如果登录成功,会执行以下代码块
        // 打印登录获取的 code
        console.log(res.code);

        // 调用 Login 函数,传入 res.code,并且使用 Promise 对象处理返回结果
        Login(res.code).then((res) => {
          // 打印返回的数据
          console.log(res.data);
          console.log(res.data.access_token);

          // 根据不同平台进行 token 存储处理

          // 微信小程序平台处理
          /*#ifdef MP-WEIXIN*/
          wx.setStorageSync("token", res.data.access_token);
          wx.setStorageSync("Bear", res.data.token_type);
          /*#endif*/
        });
      } else {
        // 登录失败时的处理
        console.log("登录失败!" + res.errMsg);
      }
    },
  });
}

详细解释:

  1. **wx.login({ ... })**:这是一个微信小程序的 API 调用,用于获取用户登录凭证 code。wx 是微信小程序提供的全局对象,wx.login 方法获取用户登录凭证(code),然后执行 success 回调函数。
  2. **success(res) { ... }**:登录成功后的回调函数,参数 res 包含了登录成功后的返回信息,其中 res.code 是用户登录凭证。
  3. **if (res.code) { ... } else { ... }**:判断是否成功获取了登录凭证,如果成功则执行相应的操作,否则输出登录失败信息。
  4. **Login(res.code).then((res) => { ... });**:调用名为 Login 的函数(假设是一个异步函数或者返回 Promise 的函数),将 res.code 作为参数传递给它。成功获取到返回结果后,使用 .then() 处理返回的数据。
  5. console.log(res.data); 和 **console.log(res.data.access_token);**:打印登录成功后返回的数据,包括 access_token。
  6. 条件编译块
    • /*#ifdef MP-WEIXIN*/ 和 **/*#endif*/**:这部分是条件编译的语法,用于区分不同的平台。在微信小程序平台下执行 wx.setStorageSync 存储 token。

微信h5登录

先写一个样式

代码语言:javascript
复制
     <button  @click="getWeChatCode">微信授权登录</button>

在网页中创建一个可点击的按钮,创建一个回调函数getWeChatCode

代码实现

主要分为两个函数:checkWeChatCode()getWeChatCode()。来逐步解释这两个函数的作用和实现细节:

1. checkWeChatCode()
代码语言:javascript
复制
checkWeChatCode() {
  let code = this.getUrlCode("code");
  let http = this.getUrlCode("http");
  console.log(22, code, http, encodeURIComponent(location.href));
  if (code) {
    // this.handleToLogin(code)  //该方法如果回调页面是在本页面才使用 我这里的实例没有使用回调页面使用了
    console.log(23);
  }
},
  • 作用:用于检查当前页面 URL 中是否包含名为 code 的参数。
  • 详细解释
    • this.getUrlCode("code"):调用 getUrlCode 函数获取 URL 中名为 code 的参数值。
    • this.getUrlCode("http"):获取 URL 中名为 http 的参数值。
    • console.log(22, code, http, encodeURIComponent(location.href));:输出日志,显示 codehttp 参数的值,以及当前页面的 URL。
2. getWeChatCode()
代码语言:javascript
复制
getWeChatCode() {
  uni.setStorageSync("wechat_login_tag", "true");
  const appID = "wxqweqweqwe123123"; // 公众号appID
  const parsedUrl = new URL(window.location.href);
  const basAAA = parsedUrl.origin;
  const redirectUrl = basAAA;
  const callBack = `${redirectUrl}/user/index`; // 回调地址 就是你的完整地址登录页

  window.location.href =
    "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
    appID +
    "&redirect_uri=" +
    encodeURIComponent(callBack) +
    "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
},
  • 作用:用于发起微信授权登录请求,如果当前页面没有 code 参数,则重定向到微信授权页面。
  • 详细解释
    • "https://open.weixin.qq.com/connect/oauth2/authorize":微信授权登录接口地址。
    • appid=:传入公众号的 AppID。
    • redirect_uri=:传入经过 encodeURIComponent 编码的回调地址。
    • response_type=code:要求微信返回 code 类型的授权码。
    • scope=snsapi_userinfo:获取用户的基本信息。
    • state=1:状态参数,用于防止 CSRF 攻击。
    • #wechat_redirect:微信要求的固定参数,表示重定向到微信授权页面。
    • uni.setStorageSync("wechat_login_tag", "true");:在 uni-app 中设置一个本地存储标记,用于退出登录后不再自动触发登录。
    • const appID = "wxqweqweqwe123123";:设置微信公众号的 AppID,确保请求授权时使用正确的应用标识。
    • const parsedUrl = new URL(window.location.href);:解析当前页面的 URL。
    • const basAAA = parsedUrl.origin;:获取当前页面的域名部分。
    • const redirectUrl = basAAA;:设置重定向地址为当前页面的域名部分。
    • const callBack = ${redirectUrl}/user/index;:拼接完整的回调地址,这里将重定向到 /user/index 页面。
    • window.location.href = ...:构建微信授权链接并进行页面重定向。
页面获取登陆后的code
代码语言:javascript
复制
  onLoad(parm) {
    let code = this.getUrlCode("code");
    console.log(code);
  },
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 农民工前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导文
  • 微信小程序登录
    • 先写一个样式
      • 代码实现
        • 详细解释:
        • 微信h5登录
          • 先写一个样式
            • 代码实现
            相关产品与服务
            云开发 CloudBase
            云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档