当前位置: 首页 > news >正文

uniapp-实现微信授权登录

目录

 前言

1:步骤

首先,在微信开放平台上注册一个应用程序,并获得相应的App ID和App Secret。我们需要这些信息来获取access token和用户的openid。

将微信开放平台提供的SDK下载到本地。

使用微信提供的SDK,将微信授权登录的页面嵌入到Uniapp的页面中。

在授权登录页面上添加相应的按钮,以触发授权登录的过程。

在Uniapp中编写相应的代码来获取access token和用户的openid。

根据用户的openid,与应用程序的后端进行通信,以获取用户的详细信息。

将用户的详细信息展示在应用程序中。

2:逻辑

下载并解压微信开放平台提供的SDK,将微信授权登录的文件夹放置在Uniapp的static文件夹下,重命名为wxlogin。

在授权页面的vue文件中,使用iframe标签加载wxlogin文件夹下的login.html文件。代码如下:

3.在login.html文件中,添加授权登录的相关代码:

4.在授权登录页面上添加相应的按钮以触发授权登录的过程。代码如下:

5.在Uniapp的公用函数中编写获取access token和用户的openid的代码。

6.在授权页面的vue文件中编写获取access token和用户的openid的代码,获取用户的详细信息。 

完整代码以及注释、使用方法

用法

关闭弹窗: this.tanchu_sheng = false; 这行代码的作用是关闭一个弹窗(可能是一个授权提示或者其他用户交互界面)。这是为了确保在开始微信登录流程之前,页面上不会有其他干扰用户的元素。

获取用户信息: 使用 uni.getUserInfo 方法来获取用户的微信信息。这个方法会弹出一个窗口让用户确认是否授权应用获取他们的微信信息。

  desc: 提供一个描述,告诉用户为什么需要这些权限。

success: 如果用户同意授权,会调用这个回调函数,并将用户的信息作为参数传递。

使用微信登录: 在获取用户信息成功后,调用 uni.login 方法进行微信登录。

provider: 设置为 'weixin',表示使用微信进行登录。

success: 登录成功后的回调函数,会返回一个包含用户凭证 code 的对象。

将 code 发送到服务器: 使用 uni.request 方法将获取到的 code 发送到服务器。

url: 服务器端处理微信登录的接口地址。

method: 设置为 'POST',表示使用 POST 方法提交数据。

data: 包含 code 的对象,将被发送到服务器。

success: 当请求成功时调用的回调函数。

处理登录结果: 在服务器成功处理微信登录后,显示一个提示信息,并在 2 秒后重定向用户到首页。

解析

1.用户体验: 通过提供微信登录,应用能够提供更快捷、更方便的用户登录体验,特别是对于已经安装了微信并且频繁使用微信的用户。

安全性: 微信登录是一种相对安全的登录方式,因为它依赖于微信的用户认证机制。应用本身不需要存储用户的用户名和密码,减少了用户信息泄露的风险。

用户信息获取: 通过微信登录,应用能够直接获取到用户的微信信息,这可以用来提升用户体验,例如,直接使用用户的微信头像和昵称。

服务器端验证: 将微信登录的 code 发送到服务器端进行验证和处理是一种常见的做法。这样可以确保登录过程的安全性,防止恶意攻击。

错误处理和用户提示: 在这段代码中,虽然提供了成功的提示,但是对于可能出现的错误情况并没有进行处理。在实际应用中,增加错误处理逻辑是非常重要的,以确保用户在遇到问题时能够得到明确的指导。

代码优化: 这段代码中有一些重复的部分,例如 console.log(lres.code, '查看code--------2'); 和 console.log(res, '测试是否成功?'); 主要用于调试。在实际生产环境中,应该去除不必要的调试信息,保持代码的整洁。

总的来说,这段代码提供了一个微信登录的完整实现示例,展示了如何在 uni-app 中集成微信登录,以及如何处理登录过程中的各个步骤。通过这种方式,开发者可以在多个平台上提供一致的用户登录体验,提高用户满意度和应用的使用率


在很多App中,我们都能看到微信授权登录的场景,大多数人只要授权,就可以使用App中的很多功能。微信是目前最受用户欢迎的社交平台之一。相比于其他社交平台,微信授权用户可以更加方便地登录应用程序。本文将详细介绍如何在Uniapp中实现微信授权登录,并提供相应的代码和注释。

 前言

在移动应用开发中,提供第三方登录是一种常见的用户认证方式。微信登录作为一种广泛使用的第三方登录方式,在许多应用中都有集成。uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持开发者使用同一套代码同时发布到 iOS、Android、Web 以及各种小程序和快应用平台。

在这段代码中,我们将探讨如何在 uni-app 中实现微信授权登录的功能。这个功能允许用户使用他们的微信账号快速登录应用,提高了用户体验并减少了用户注册和登录的门槛。

1:步骤

  1. 首先,在微信开放平台上注册一个应用程序,并获得相应的App ID和App Secret。我们需要这些信息来获取access token和用户的openid。

  2. 将微信开放平台提供的SDK下载到本地。

  3. 使用微信提供的SDK,将微信授权登录的页面嵌入到Uniapp的页面中。

  4. 在授权登录页面上添加相应的按钮,以触发授权登录的过程。

  5. 在Uniapp中编写相应的代码来获取access token和用户的openid。

  6. 根据用户的openid,与应用程序的后端进行通信,以获取用户的详细信息。

  7. 将用户的详细信息展示在应用程序中。

2:逻辑

  1. 下载并解压微信开放平台提供的SDK,将微信授权登录的文件夹放置在Uniapp的static文件夹下,重命名为wxlogin。

  2. 在授权页面的vue文件中,使用iframe标签加载wxlogin文件夹下的login.html文件。代码如下:

<template><view><iframe :src="url" :style="iframeStyle"></iframe></view>
</template>
<script>
export default {data() {return {iframeStyle: {width: "100%",height: "100%",border: "none",},url: "static/wxlogin/login.html",};},
};
</script>

3.在login.html文件中,添加授权登录的相关代码:

<script>const authorize = () => {WeixinJSBridge.invoke("getBrandWCPayRequest", {appId: "{{appid}}",timeSjtabmp: "{{time}}",nonceStr: "{{noncestr}}",package: "{{package}}",signType: "{{signtype}}",paySign: "{{paySign}}",}, (res) => {if (res.err_msg === "get_brand_wcpay_request:ok") {// 用户授权登录成功,将access token和用户的openid发送到应用程序的后端window.parent.postMessage({type: "success",data: {accessToken: "{{access_token}}",openid: "{{openid}}",},}, "*");} else {// 用户授权登录失败window.parent.postMessage({type: "fail",}, "*");}});};
</script>

4.在授权登录页面上添加相应的按钮以触发授权登录的过程。代码如下:

<template><view><iframe :src="url" :style="iframeStyle"></iframe><button @click="authorize">微信一键登录</button></view>
</template>
<script>
export default {data() {return {iframeStyle: {width: "100%",height: "100%",border: "none",},url: "static/wxlogin/login.html",};},methods: {authorize() {// 通过postMessage向iframe发送授权登录的指令const iframe = document.getElementsByTagName("iframe")[0];iframe.contentWindow.postMessage({type: "authorize",}, "*");},},
};
</script>

5.在Uniapp的公用函数中编写获取access token和用户的openid的代码。

function getAccessToken(code) {const url =`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${config.appid}&secret=${config.secret}&code=${code}&grant_type=authorization_code`;return new Promise((resolve, reject) => {uni.request({url,success(res) {if (res.data.access_token) {resolve(res.data);} else {reject(res);}},fail(err) {reject(err);},});});
}function getUserInfo(accessToken, openid) {const url =`https://api.weixin.qq.com/sns/userinfo?access_token=${accessToken}&openid=${openid}&lang=zh_CN`;return new Promise((resolve, reject) => {uni.request({url,success(res) {if (res.data.errcode) {reject(res);} else {resolve(res.data);}},fail(err) {reject(err);},});});
}

6.在授权页面的vue文件中编写获取access token和用户的openid的代码,获取用户的详细信息。 

完整代码以及注释、使用方法

wxlogin() {this.tanchu_sheng = false;//先获取用户的信息uni.getUserInfo({desc: '登录的数据',success(ures) {console.log(ures, '返回的用户信息');//这个地方的用户信息无论登录成功失败都可以拿到,只是拿到用户的信息//在成功的回调中去使用微信登录uni.login({provider: 'weixin', //使用微信登录success(lres) {console.log(lres, '获取到的code--------1');//我们要根据上面获取的code码去作为请求参数发送给后端let params = {code: lres.code};console.log(lres.code, '查看code--------2');// 1uni.request({url: '接口', //这里用自己的地址获取method: 'POST',data: {code: lres.code},success: (res) => {console.log(res, '测试是否成功?');// 提示uni.showToast({title: `登陆成功`,icon: 'none',duration: 2000,success: () => {// console.log('轻提示显示成功');setTimeout(function() {uni.reLaunch({url: '/pages/index/index',});}, 2000);},fail: (error) => {// console.error('轻提示显示失败', error);}});}});// 2}});}});},

用法

这段代码定义了一个 wxlogin 方法,该方法执行微信登录的整个流程。下面是这个方法的详细步骤和用法:

  1. 关闭弹窗: this.tanchu_sheng = false; 这行代码的作用是关闭一个弹窗(可能是一个授权提示或者其他用户交互界面)。这是为了确保在开始微信登录流程之前,页面上不会有其他干扰用户的元素。

  2. 获取用户信息: 使用 uni.getUserInfo 方法来获取用户的微信信息。这个方法会弹出一个窗口让用户确认是否授权应用获取他们的微信信息。

    1.   desc: 提供一个描述,告诉用户为什么需要这些权限。

    2. success: 如果用户同意授权,会调用这个回调函数,并将用户的信息作为参数传递。

  3. 使用微信登录: 在获取用户信息成功后,调用 uni.login 方法进行微信登录。

    1. provider: 设置为 'weixin',表示使用微信进行登录。

    2. success: 登录成功后的回调函数,会返回一个包含用户凭证 code 的对象。

  4. 将 code 发送到服务器: 使用 uni.request 方法将获取到的 code 发送到服务器。

    1. url: 服务器端处理微信登录的接口地址。

    2. method: 设置为 'POST',表示使用 POST 方法提交数据。

    3. data: 包含 code 的对象,将被发送到服务器。

    4. success: 当请求成功时调用的回调函数。

  5. 处理登录结果: 在服务器成功处理微信登录后,显示一个提示信息,并在 2 秒后重定向用户到首页。

  6. 解析

    这段代码展示了如何在 uni-app 中实现微信登录的完整流程。这个过程涉及到用户授权、获取用户信息、使用微信登录以及与服务器端的交互。
  • 1.用户体验: 通过提供微信登录,应用能够提供更快捷、更方便的用户登录体验,特别是对于已经安装了微信并且频繁使用微信的用户。

  • 安全性: 微信登录是一种相对安全的登录方式,因为它依赖于微信的用户认证机制。应用本身不需要存储用户的用户名和密码,减少了用户信息泄露的风险。

  • 用户信息获取: 通过微信登录,应用能够直接获取到用户的微信信息,这可以用来提升用户体验,例如,直接使用用户的微信头像和昵称。

  • 服务器端验证: 将微信登录的 code 发送到服务器端进行验证和处理是一种常见的做法。这样可以确保登录过程的安全性,防止恶意攻击。

  • 错误处理和用户提示: 在这段代码中,虽然提供了成功的提示,但是对于可能出现的错误情况并没有进行处理。在实际应用中,增加错误处理逻辑是非常重要的,以确保用户在遇到问题时能够得到明确的指导。

    代码优化: 这段代码中有一些重复的部分,例如 console.log(lres.code, '查看code--------2'); 和 console.log(res, '测试是否成功?'); 主要用于调试。在实际生产环境中,应该去除不必要的调试信息,保持代码的整洁。

    总的来说,这段代码提供了一个微信登录的完整实现示例,展示了如何在 uni-app 中集成微信登录,以及如何处理登录过程中的各个步骤。通过这种方式,开发者可以在多个平台上提供一致的用户登录体验,提高用户满意度和应用的使用率

相关文章:

  • 网络安全(黑客)—小白自学
  • Pytorch 里面torch.no_grad 和model.eval(), model.train() 的作用
  • Docker本地部署Drupal并实现公网访问
  • 【课程笔记 - 目录】2023 微信公众号开发教程全开源
  • Docker安装、卸载,以及各种操作
  • MySQL性能分析工具的使用
  • python自动化测试selenium核心技术3种等待方式详解
  • OC-编译错误
  • 前端小技巧: 防抖和节流的区别
  • 根据json生成Java类
  • 关于navigator.userAgent判断苹果手机的问题和踩坑
  • Java中的反射机制
  • 09-MySQL主从复制
  • idea 一直卡在maven正在解析maven依赖
  • asp.net core 生命周期
  • 【css3】浏览器内核及其兼容性
  • axios 和 cookie 的那些事
  • create-react-app项目添加less配置
  • FineReport中如何实现自动滚屏效果
  • Java教程_软件开发基础
  • laravel5.5 视图共享数据
  • linux安装openssl、swoole等扩展的具体步骤
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL数据库运维之数据恢复
  • PHP 7 修改了什么呢 -- 2
  • RxJS: 简单入门
  • vue-cli3搭建项目
  • 技术:超级实用的电脑小技巧
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 面试遇到的一些题
  • 容器服务kubernetes弹性伸缩高级用法
  • 实现简单的正则表达式引擎
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 原生 js 实现移动端 Touch 滑动反弹
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • - 转 Ext2.0 form使用实例
  • Android开发者必备:推荐一款助力开发的开源APP
  • 选择阿里云数据库HBase版十大理由
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #{}和${}的区别是什么 -- java面试
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Ubuntu(修改root信息)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)Nginx简介和安装教程
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (windows2012共享文件夹和防火墙设置
  • (办公)springboot配置aop处理请求.
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (五)c52学习之旅-静态数码管
  • (一)插入排序
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Linux下编译安装log4cxx
  • (转)用.Net的File控件上传文件的解决方案