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

news2025/2/6 15:15:53

[猫头虎分享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 加密敏感数据

结语

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


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OrangePi AIpro 性能测试以及使用体验

OrangePi AIpro 性能测试以及使用体验 1. 介绍 OrangePi AIpro(8T)采用昇腾AI技术路线。 具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&#xff0c;支持双4…

超详细避坑指南!OrangpiAIPro转换部署模型全流程!

目录 OrangepiPro初体验 前述&#xff1a; 一、硬件准备 二、安装CANN工具链&#xff08;虚拟机&#xff09; 三、配置模型转换环境&#xff08;虚拟机&#xff09; 1.安装miniconda 。 2.创建环境。 3.安装依赖包 四、转换模型 1. 查看设备号&#xff08;开发板&…

Linux服务器安装anaconda、配置pytorch环境

Linux服务器安装anaconda并配置pytorch环境 Linux服务器安装anaconda下载anaconda安装anaconda验证是否安装成功注意默认python版本 配置pytorch环境新建虚拟环境安装pytorch Linux服务器安装anaconda 下载anaconda 首先进入anaconda网站&#xff0c;根据自己的需要选择一个版…

LLM中的RoPE位置编码代码解析与RoPE的性质分析(一)

本博客需要对位置编码有一定了解&#xff0c;但不熟悉代码实现的老哥看。 正弦位置编码&#xff08;sinusoidal&#xff09; 在介绍RoPE之前&#xff0c;先回顾一下正弦位置编码。 数学表达 P E ( p o s , 2 i ) s i n ( p o s 1000 0 2 i / d m o d e l ) PE(pos, 2i) sin…

5.27作业

定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream>using namespace std; namespace my_space {string s1;string reverse1(string s1);} using namespace my_space; int m…

Web(数字媒体)期末作业

一.前言 1.本资源为类似于打飞机的网页游戏 2.链接如下&#xff1a;【免费】前端web或者数字媒体的期末作业&#xff08;类似于打飞机的2D网页小游戏&#xff09;资源-CSDN文库 二.介绍文档

HR人才测评,哪些岗位需要测评想象力?

什么是想象力&#xff1f; 想象力是指&#xff0c;人们通过在已有物质的基础上&#xff0c;通过大脑想象、加工、创造出新事物的能力&#xff0c;举一个非常简单的例子&#xff0c;在提到鸟这种生活的时候&#xff0c;大家会联想到各种各样不同鸟的品种。 哪些岗位需要测评…

喜讯 | 聚铭网络入选2024安在新榜网络安全产品“大众点评”百强榜及全景图

近日&#xff0c;安在新榜发布了备受期待的《2024中国网络安全产品用户调查报告》。在这份权威报告中&#xff0c;聚铭网络凭借先进的技术、优秀的产品和专业的配套服务&#xff0c;成功入选《2024安在新榜网络安全产品“大众点评”百强榜》。 报告通过对全国企业用户进行专项调…

海外仓erp系统是什么?和海外仓管理系统一样吗?

为了满足海外仓全球化发展的大趋势&#xff0c;同时提升海外仓运转的效率&#xff0c;一套好用&#xff0c;性价比高的海外仓管理系统还是非常重要的。 不过很多海外仓企业其实不太分得清erp系统和海外仓管理系统的差异&#xff0c;今天我们就来系统的聊一下&#xff0c;方便大…

React useState修改对象

在 React 中&#xff0c;useState 是一个 Hook&#xff0c;它可以让函数组件拥有状态。当想要改变一个对象类型的状态时&#xff0c;我们需要使用展开运算符&#xff08;...&#xff09;或者 Object.assign 来确保状态是正确地更新。 以下是一个使用 useState 来更新对象的例子…

windows下nvm的安装及使用

目录 一、下载二、安装三、使用 一、下载 下载链接&#xff1a;https://github.com/coreybutler/nvm-windows/releases 二、安装 双击 nvm-setup.exe&#xff0c;按提示一步步安装。 三、使用 # 查看已安装的版本信息 nvm list&#xff08;可简写为&#xff1a;nvm ls&am…

计算机视觉中-语义分割

语义分割 语义分割是计算机视觉中的一个关键技术&#xff0c;它涉及对图像中的每个像素进行类别划分&#xff0c;从而识别出图像中的不同物体或区域。具体来说&#xff0c;语义分割就是按照“语义”给图像上目标类别中的每一点打上一个标签&#xff0c;使得不同种类的东西在图像…

【RSGIS数据资源】中国多时期土地利用遥感监测数据集(CNLUCC)

文章目录 数据基本信息摘要数据说明数据引用方式 数据基本信息 数据时间&#xff1a; 多时期(1970年代末期以来11期) 空间位置&#xff1a; 中国 数据格式&#xff1a; 矢量与栅格 空间分辨率&#xff1a; 30m 主题分类&#xff1a; 中国土地利用遥感监测数据 DOI标识&#xf…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时&#xff0c;确实有点迷糊。但是他们是独立的&#xff0c;没有太大关联。 就是说在Android studio中看到的两个版本信息&#xff0c;并无太大关联&#xff0c;是相互独立的。Gradle插件版本决定了你的项目是如何构建的&#xff0c;而Gradle版本是执行构建…

UML-系统架构师(二)

1、UML&#xff08;Unified Modeling Language&#xff09;是面向对象设计的建设工具&#xff0c;独立于任何具体程序设计语言&#xff0c;以下&#xff08;&#xff09;不属于UML中的模型。 A用例图 B协作图 C活动图 DPAD图 解析&#xff1a; UML一共14种图 结构图&…

电商场景的视频动效

AtomoVideo:AIGC赋能下的电商视频动效生成本文分享阿里妈妈视频 AIGC(AtomoVideo等) 赋能视频广告创意的探索和实践。通过基于扩散模型的视频生成技术,结合可控生成技术,使静态电商图片能够栩栩如生地“动”起来,实现了在电商领域的视频 AIGC 应用落地。https://mp.weixi…

LDRA Testbed(TBrun)软件单元测试_操作指南

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

星融元获2024网络开源优秀创新成果奖!

5月25日&#xff0c;星融元受邀参加2024年第四届网络开源技术生态大会&#xff0c;分享主题为“开放的网络 开放的AI生态”主题演讲&#xff0c;深受现场用户的认可&#xff1b;《Easy RoCE&#xff1a;基于SONiC、Klish和Prometheus的极简无损网络解决方案》获得2024网络开源优…

网络其他重要协议(DNS、ICMP、NAT)

1.DNS DNS是一整套从域名映射到IP的系统 1.1 DNS背景 TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序&#xff0c;但是IP地址不方便记忆&#xff0c;例如我们想访问百度就会在浏览器中输入baidu.com而不是百度的IP地址。于是人们发明了一种叫主机名的东西, 是…

程序员日志之我的创作纪念日

目录 传送门正文日志1、概要2、ChatGPT的成为创作者初心的回答3、最受欢迎的博文4、未来创作 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringBoot3框架&#xff08;精品&#xff09; MyBatis框架&#xff08;…