码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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文件。代码如下:

    1. <template>
    2. <view>
    3. <iframe :src="url" :style="iframeStyle">iframe>
    4. view>
    5. template>
    6. <script>
    7. export default {
    8. data() {
    9. return {
    10. iframeStyle: {
    11. width: "100%",
    12. height: "100%",
    13. border: "none",
    14. },
    15. url: "static/wxlogin/login.html",
    16. };
    17. },
    18. };
    19. script>

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

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

    1. <template>
    2. <view>
    3. <iframe :src="url" :style="iframeStyle">iframe>
    4. <button @click="authorize">微信一键登录button>
    5. view>
    6. template>
    7. <script>
    8. export default {
    9. data() {
    10. return {
    11. iframeStyle: {
    12. width: "100%",
    13. height: "100%",
    14. border: "none",
    15. },
    16. url: "static/wxlogin/login.html",
    17. };
    18. },
    19. methods: {
    20. authorize() {
    21. // 通过postMessage向iframe发送授权登录的指令
    22. const iframe = document.getElementsByTagName("iframe")[0];
    23. iframe.contentWindow.postMessage({
    24. type: "authorize",
    25. }, "*");
    26. },
    27. },
    28. };
    29. script>

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

    1. function getAccessToken(code) {
    2. const url =
    3. `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${config.appid}&secret=${config.secret}&code=${code}&grant_type=authorization_code`;
    4. return new Promise((resolve, reject) => {
    5. uni.request({
    6. url,
    7. success(res) {
    8. if (res.data.access_token) {
    9. resolve(res.data);
    10. } else {
    11. reject(res);
    12. }
    13. },
    14. fail(err) {
    15. reject(err);
    16. },
    17. });
    18. });
    19. }
    20. function getUserInfo(accessToken, openid) {
    21. const url =
    22. `https://api.weixin.qq.com/sns/userinfo?access_token=${accessToken}&openid=${openid}&lang=zh_CN`;
    23. return new Promise((resolve, reject) => {
    24. uni.request({
    25. url,
    26. success(res) {
    27. if (res.data.errcode) {
    28. reject(res);
    29. } else {
    30. resolve(res.data);
    31. }
    32. },
    33. fail(err) {
    34. reject(err);
    35. },
    36. });
    37. });
    38. }

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

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

    1. wxlogin() {
    2. this.tanchu_sheng = false;
    3. //先获取用户的信息
    4. uni.getUserInfo({
    5. desc: '登录的数据',
    6. success(ures) {
    7. console.log(ures, '返回的用户信息');
    8. //这个地方的用户信息无论登录成功失败都可以拿到,只是拿到用户的信息
    9. //在成功的回调中去使用微信登录
    10. uni.login({
    11. provider: 'weixin', //使用微信登录
    12. success(lres) {
    13. console.log(lres, '获取到的code--------1');
    14. //我们要根据上面获取的code码去作为请求参数发送给后端
    15. let params = {
    16. code: lres.code
    17. };
    18. console.log(lres.code, '查看code--------2');
    19. // 1
    20. uni.request({
    21. url: '接口', //这里用自己的地址获取
    22. method: 'POST',
    23. data: {
    24. code: lres.code
    25. },
    26. success: (res) => {
    27. console.log(res, '测试是否成功?');
    28. // 提示
    29. uni.showToast({
    30. title: `登陆成功`,
    31. icon: 'none',
    32. duration: 2000,
    33. success: () => {
    34. // console.log('轻提示显示成功');
    35. setTimeout(function() {
    36. uni.reLaunch({
    37. url: '/pages/index/index',
    38. });
    39. }, 2000);
    40. },
    41. fail: (error) => {
    42. // console.error('轻提示显示失败', error);
    43. }
    44. });
    45. }
    46. });
    47. // 2
    48. }
    49. });
    50. }
    51. });
    52. },

    用法

    这段代码定义了一个 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 中集成微信登录,以及如何处理登录过程中的各个步骤。通过这种方式,开发者可以在多个平台上提供一致的用户登录体验,提高用户满意度和应用的使用率

  • 相关阅读:
    利用Github Action实现Tornadofx/JavaFx打包
    K8S-CNI
    Java 第二阶段提升编程能力【IO流】
    non-trivial designated initializers not supported
    函数传址,但无法改变xy数据问题
    传统游戏难产 育碧瞄向Web3
    hyperf redis-cluster连接
    【linux驱动开发】-驱动入门之LED
    SpringMVC异常处理
    【Ansys 2024 R1 】助力扩展AI支持的多物理场优势,重构用户体验
  • 原文地址:https://blog.csdn.net/m0_72196169/article/details/134339980
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号