[猫头虎分享21天微信小程序基础入门教程] 第17天:小程序的用户授权与安全

[猫头虎分享21天微信小程序基础入门教程] 第17天:小程序的用户授权与安全


请添加图片描述

第17天:小程序的用户授权与安全 🔒

自我介绍

大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重点了解如何实现用户授权和确保小程序的安全性。这些内容对于保护用户隐私和数据安全至关重要。🚀

用户授权

微信小程序提供了一些 API 来获取用户的授权信息,例如获取用户的基本信息、位置信息等。

一、获取用户基本信息

1. 在页面中添加授权按钮

wxml 文件:

<view class="container">
  <button open-type="getUserInfo" bindgetuserinfo="handleGetUserInfo">获取用户信息</button>
</view>
2. 处理授权回调

js 文件:

Page({
  data: {
    userInfo: null
  },
  handleGetUserInfo(e) {
    if (e.detail.userInfo) {
      this.setData({
        userInfo: e.detail.userInfo
      });
      wx.showToast({
        title: '授权成功',
        icon: 'success'
      });
    } else {
      wx.showToast({
        title: '授权失败',
        icon: 'none'
      });
    }
  }
});

二、获取用户位置信息

1. 在页面中添加授权按钮

wxml 文件:

<view class="container">
  <button open-type="getLocation" bindtap="handleGetLocation">获取位置信息</button>
  <text>{{location}}</text>
</view>
2. 处理授权回调

js 文件:

Page({
  data: {
    location: ''
  },
  handleGetLocation() {
    wx.getLocation({
      type: 'wgs84',
      success: (res) => {
        const latitude = res.latitude;
        const longitude = res.longitude;
        this.setData({
          location: `纬度: ${latitude}, 经度: ${longitude}`
        });
        wx.showToast({
          title: '获取成功',
          icon: 'success'
        });
      },
      fail: (err) => {
        wx.showToast({
          title: '获取失败',
          icon: 'none'
        });
        console.error('获取位置失败:', err);
      }
    });
  }
});

用户登录

微信小程序提供了 wx.login 接口,用于获取用户的登录凭证。

三、实现用户登录

1. 调用 wx.login 获取登录凭证

js 文件:

Page({
  data: {
    loggedIn: false
  },
  onLoad() {
    this.login();
  },
  login() {
    wx.login({
      success: (res) => {
        if (res.code) {
          // 将 res.code 发送到后台换取 openId, sessionKey, unionId
          wx.request({
            url: 'https://example.com/api/login',
            method: 'POST',
            data: {
              code: res.code
            },
            success: (response) => {
              console.log('登录成功:', response.data);
              this.setData({
                loggedIn: true
              });
              wx.showToast({
                title: '登录成功',
                icon: 'success'
              });
            },
            fail: (err) => {
              wx.showToast({
                title: '登录失败',
                icon: 'none'
              });
              console.error('登录失败:', err);
            }
          });
        } else {
          wx.showToast({
            title: '登录失败',
            icon: 'none'
          });
          console.error('登录失败:', res.errMsg);
        }
      }
    });
  }
});

数据安全

为了保护用户的数据安全,我们需要采取一些措施来防止数据泄露和篡改。

四、加密数据传输

在进行网络请求时,可以使用 HTTPS 协议来加密数据传输,确保数据在传输过程中的安全性。

1. 确保所有请求使用 HTTPS

所有的 wx.request 请求都应使用 HTTPS 协议:

wx.request({
  url: 'https://example.com/api/data',
  method: 'GET',
  success: (res) => {
    console.log('数据获取成功:', res.data);
  },
  fail: (err) => {
    console.error('请求失败:', err);
  }
});

五、数据加密与解密

在需要传输敏感数据时,可以使用加密算法对数据进行加密。

1. 使用 AES 加密

安装 crypto-js 库:

npm install crypto-js
2. 加密与解密示例

js 文件:

const CryptoJS = require('crypto-js');

function encryptData(data, key) {
  return CryptoJS.AES.encrypt(data, key).toString();
}

function decryptData(ciphertext, key) {
  let bytes = CryptoJS.AES.decrypt(ciphertext, key);
  return bytes.toString(CryptoJS.enc.Utf8);
}

const key = 'my-secret-key';
const data = 'sensitive data';

const encryptedData = encryptData(data, key);
console.log('加密数据:', encryptedData);

const decryptedData = decryptData(encryptedData, key);
console.log('解密数据:', decryptedData);

小测试 🧪

  • 实现用户授权功能,包括获取用户基本信息和位置信息。
  • 实现用户登录功能,并在服务器端验证用户登录凭证。
  • 使用 AES 加密算法对敏感数据进行加密和解密。

今日学习总结 📚

概念详细内容
用户授权获取用户基本信息、位置信息
用户登录使用 wx.login 获取登录凭证,验证用户身份
数据安全使用 HTTPS 加密数据传输,使用 AES 加密敏感数据

结语

通过今天的学习,你应该掌握了如何在小程序中实现用户授权与登录,以及如何确保数据的安全性。这些技术对于保护用户隐私和数据安全至关重要。明天我们将探讨小程序的性能监控与优化。如果你有任何疑问,欢迎关注并留言在我的公众号猫头虎技术团队。📩


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/649103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】Vector的简易模拟与探索

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【C++初阶】auto关键字

目录 1.auto简介 2.auto的使用 1.auto简介 在早期C/C中auto的含义是&#xff1a;使用auto修饰的变量&#xff0c;是具有自动存储器的局部变量&#xff0c;但遗憾的 是一直没有人去使用它&#xff0c;大家可思考下为什么&#xff1f; C11中&#xff0c;标准委员会赋予了auto全…

Go语言

Go语言 Go语言全称Golanguage&#xff0c;Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译并发型语言。于2009年首次发布 官网 特点 简单易学&#xff1a;Go语言语法简洁明了&#x…

【AD21】原理图PDF文件的输出

原理图PDF文件可以共享给团队成员&#xff0c;用于设计审核、讨论和协同工作。 菜单栏中点击文件->智能PDF。 在弹出的界面点击Next&#xff0c;勾选当前项目&#xff0c;修改文件名&#xff0c;避免与制造装备图PDF文件重名将其覆盖&#xff0c;点击Next。 只输出原理图…

SmartEDA革新电路设计,效率飙升,Multisim与Proteus迎来强劲对手!

在电路设计领域&#xff0c;Multisim和Proteus一直以其强大的仿真功能和广泛的应用范围受到设计师们的青睐。然而&#xff0c;随着科技的不断进步和创新&#xff0c;一款名为SmartEDA的新兴软件正以其独特的优势&#xff0c;重新定义着电路设计的效率。 SmartEDA的崛起&#x…

基于Ubuntu的Bash脚本实现SystemUI的编译真机验证

使用场景描述 当开发SystemUI的时候&#xff0c;开发完一个需求后需要到真机上验证&#xff0c;虽然SystemUI模块开发最后的产物也是APK&#xff0c;但是这个APK 却不能单独安装查看效果&#xff0c;因为SystemUI是系统级别的应用&#xff0c;需要放置到系统指定的目录下。这时…

这13个前端库,帮我在工作中赢得了不少摸鱼时间

前言 平时开发的过程中&#xff0c;常常会使用到一些第三方库来提高开发效率&#xff0c;我总结了自己工作这么久以来经常用到的 13 个库&#xff0c;希望对大家有帮助&#xff5e; antd 全称应该是Ant Design&#xff0c;这是一个 React 的组件库&#xff0c;旨在提供一套常…

Android Studio 中gradle的bin和all区别

1.在android studio中设置安装gradle时&#xff0c;真各种版本看到眼花缭乱&#xff0c;还有疑惑gradle-*.*-all.zip与gradle-*.*-bin.zip的区别是什么。下面解压如下: bin&#xff1a; all: 其实&#xff0c;用bin就可以了&#xff0c;all文件就是多了docs(文档)和src(源码)两…

本周日晚8点预约宣讲会 | 深入了解项目,开启你的开源之旅!

引言 社区的亲爱的同学们&#xff01;为了帮助大家在这个夏天更好的参加“开源之夏”的活动&#xff0c;我们联合2位资深开源项目导师&#xff0c;给大家策划了这次“开源之夏”宣讲会。 这不仅是一个了解如何参与开源项目的机会&#xff0c;更是一个直接与项目导师面对面交流…

华火硬核专利库丨登创新科技之巅,探创新未至之境

十年的艰苦卓越&#xff0c;“灶”就了华火科技之巅&#xff1b;电生明火的应用&#xff0c;不仅是一次颠覆性的创新&#xff0c;更是对未来厨房的无尽遐想与探索。在当今日新月异的科技时代&#xff0c;创新已成为推动社会进步的重要动力。 华火烹饪科技&#xff0c;以其深厚的…

Unity 直线间隔放置物体

直线间隔放置物体 0. 新建一个空物体&#xff0c;挂上脚本ZYF_QuickPlaceObj 设置 间隔距离 和 预制体在Scene中拖动即可按间隔距离实例化物体物体的朝向始终朝向统一方向&#xff0c;并且可以在Scene中拖拽更改 传送门

Object类——toString方法和equals方法

前言&#xff1a; 在java中&#xff0c;所有类都是有继承关系存在的&#xff0c;都默认继承Object类。当一个类继承了其他父类&#xff0c;它并不会直接继承Object类&#xff0c;但是它的父类若是没有其他继承关系也会默认继承Object类&#xff0c;子类也可以继续调用Object类…

深度学习——图像分类(CNN)—测试模型

测试模型 1.导入必要的库2.加载测试数据集3.假设CSV文件中的图像文件名是完整的路径4.随机选择一张图片进行展示5.加载图像6.使用模型进行预测7.设置模型的预测结果8.计算准确率9.指定test文件夹路径10.读取名为image_path的图片11.加载图像12.检查图像是否为空 训练的模型是上…

Easy IP + DNAT(服务器NAT转换)

第一章 Easy IP 1.1 一般家庭和企业使用的地址转换方式 直接使用出接口的地址做转换Easy IP适用于小规模居于网中的主机访问Internet的场景如&#xff1a;家庭、小型网吧、小型办公室中&#xff0c;这些地方内部主机不多&#xff0c;出接口可以通过拨号方式获取一个临时公网I…

做抖音小店不懂这四个“重点”!那就别怪你的店铺,做不长久!

我相信大家做抖音小店&#xff0c;都去抖音刷过知识点&#xff0c;也去浏览器学习过技巧 但在这里&#xff0c;我给大家泼盆冷水 方法再多&#xff01;这四点不搞明白&#xff0c;那你的店铺出几天单&#xff0c;也就再也做不起来了 哪四点&#xff1f;请认真的看下去&#…

面试官:讲讲为什么SpringBoot的 jar 可以直接运行?

Spring Boot 是一个用于简化 Spring 应用程序开发的框架&#xff0c;它通过约定优于配置和大量的自动化配置&#xff0c;使得开发者可以更轻松地创建和部署 Spring 应用程序。一个特别引人注目的特性是 Spring Boot 应用可以打包成一个可执行的 JAR 文件&#xff0c;并且可以直…

新计划,不断变更!做自己,接受不美好!猪肝移植——早读(逆天打工人爬取热门微信文章解读)

时间不等人 引言Python 代码第一篇 做自己&#xff0c;没有很好也没关系第二篇结尾 引言 新计划&#xff1a; 早上一次性发几个视频不现实 所以更改一下 待后面有比较稳定的框架再优化 每天早上更新 早到8点 晚到10点 你刚刚好上班或者上课 然后偷瞄的看两眼 学习一下 补充知…

吴恩达2022机器学习专项课程C2W2:2.22 多类 softmax softmax与神经网络 softmax的代码改良 多标签分类

目录 多分类问题1.什么是多分类问题2.多分类问题案例3.二分类与多分类的区别 Softmax1. 什么是Softmax2.逻辑回归预测的计算过程3. Softmax预测的计算过程4.Softmax 回归与逻辑回归的关系5. Softmax的损失函数 softmax与神经网络1.设置Softmax层2.Softmax层的计算3.softmax激活…

Yolov5——训练目标检测模型详解(含完整源码)

项目的克隆 打开yolov5官网&#xff08;GitHub - ultralytics/yolov5 at v5.0&#xff09;&#xff0c;下载yolov5的项目&#xff1a; 环境的安装&#xff08;免额外安装CUDA和cudnn&#xff09; 打开anaconda的终端&#xff0c;创建新的名为yolov5的环境&#xff08;python选…