首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 初步介绍微信小程序
02 | 还有哪些其它公司的小程序产品
03 | 小程序的特点及开发能力
04 | 新的一年,微信小程序开放了哪些新功能?
05 | 小程序运行机制简介:从零构建一个Web App需要做哪些事情?
06 | 开发环境配置:创建你的第一个小程序项目
07 | icon组件:关于图标的4个实现方案
08 | progress组件:如何自定义实现一个环形进度条?
09 | rich-text组件:如何单击预览rich-text中的图片并保存?
10 | view容器组件及Flex布局(一):学习容器组件view及其重要属性
11 | view容器组件及Flex布局(二):介绍flex布局中常用的样式及样式值
12 | 可移动容器及可移动区域(一):学习使用movable-view与movable-area组件
13 | 可移动容器及可移动区域(二):如何实现侧滑删除功能
14 | scroll-view介绍:在小程序中如何实现滚动锚定?
15 | scroll-view介绍:如果渲染一个滚动的长列表?
16 | 滚动选择器(一):学习使用选择器组件
17 | 滚动选择器(二):使用两种方式自定义实现省、市、区三级联动的选择器
18 | 滑动选择器表单组件:如何基于wxs自定义一个竖向的slider?
19 | 页面链接组件:如何自定义一个导航栏?
20 | image媒体组件(上):如何实现图片的懒加载?
21 | image媒体组件(下):开发中经常遇到的问题?
22 | 如何实现直播间功能?(一):了解live-pusher、live-player组件的主要属性及使用限制
23 | 如何实现直播间功能?(二):如何开启、使用腾讯云的云直播功能
24 | 如何实现直播间功能?(三):安装与使用ffmepg,及使用ffmpeg进行推拉流验证
25 | 如何实现直播间功能?(四):使用live-pusher、live-player组件在小程序中实现直播功能
26 | 如何实现直播间功能?(五):同层渲染
27 | 如何实现直播间功能?(六):live-pusher、live-player组件在开发中的常见问题
28 | web-view(一):了解session、cookie等相关基本概念
29 | web-view(二):了解常见的四种鉴权方式
30 | web-view(三):如何使用koa框架,及如何进行热加载?
31 | web-view(四):如何在服务器端实现cookie与sesson的生成?
32 | web-view(五):如何将session存储到服务器端,及如何实现token验证?
33 | web-view(六):基于koa中间件,实现微信一键登录的后端接口
34 | web-view(七):实现微信用户一键登录
35 | web-view(八):了解正确的微信登录姿势
36 | web-view(九):web-view组件在开发的常见问题讲解
37 | WebGL介绍(一):了解WebGL相关的基础概念
38 | WebGL介绍(二):如何在小程序中取到WebGL上下文环境对象
39 | WebGL介绍(三):了解WebGL的世界坐标系
40 | WebGL介绍(四):重新认识右手坐标系及如何编写顶点着色器代码
41 | WebGL介绍(五):学习片断着色器编写,了解变量修饰变型uniform与attribute
42 | WebGL介绍(六):了解在WebGL中裁剪空间是如何裁剪出来的
43 | WebGL介绍(七):了解着色器变量值的绑定及三种三角形绘制模式之间的差异
44 | WebGL介绍(八):在着色器中使用共享变量,绘制一个颜色渐变的正方形
45 | WebGL介绍(九):完成动画
46 | WebGL介绍(十):绘制一个旋转的立方体
47 | WebGL介绍(十一):在3D绘制中使用纹理材质
48 | WebGL介绍(十二):如何创建相机、场景及光源
49 | WebGL介绍(十三):创建加载器、渲染器与控制器,完成3D模型文件的加载与展示
50 | 网络接口简介(一):如何使用wx.request接口
51 | 网络接口简介(二):将登录代码模块化封装
52 | 网络接口简介(三):Promise介绍及 6 个常用方法
53 | 网络接口简介(四):Promise三个方法any、all与race的使用介绍
54 | 网络接口简介(五):基于Promise+await、async关键字改写登录模块
55 | 网络接口简介(六):关于Page页面隐藏代码执行及Promise对象的catch处理的补充
56 | 网络接口简介(七):学习EventChannel对象
57 | 网络接口简介(八):观察者模式介绍及Event模块实现
58 | 网络接口简介(九):扩展wxp模块的request3方法,实现用户登录的自动融合
59 | tabBar组件(一):系统默认的tabBar组件如何开启及使用
60 | tabBar组件(二):基于系统提供的自定义方式,实现一个tabBar组件
61 | tabBar组件(三):通过自定义组件扩展的方式,给任意组件添加通用方法
62 | 开放接口(一):如何对Page进行全局扩展
63 | 开放接口(二):优化前后端登录代码,解决后端解密错误
当前位置:
首页>>
技术小册>>
微信小程序全栈开发实战(上)
小册名称:微信小程序全栈开发实战(上)
### 35 | web-view(八):了解正确的微信登录姿势 在微信小程序开发中,实现用户登录是一个基础且关键的功能,它不仅关乎用户体验,更是后续用户数据管理和权限控制的前提。当小程序需要与后端服务器进行交互,特别是涉及到用户个人数据时,微信登录成为了连接用户与服务器之间的重要桥梁。本章节将深入探讨在微信小程序中使用`web-view`组件时,如何正确地实现微信登录流程,确保用户信息安全与流程顺畅。 #### 一、微信登录基础概念 ##### 1.1 微信登录流程概述 微信登录流程大致可以分为以下几个步骤: - **用户触发登录**:用户在小程序内点击登录按钮。 - **获取code**:小程序通过调用微信提供的登录接口`wx.login()`,获取到登录凭证code。 - **换取session_key和openid**:将code发送到开发者服务器,由服务器向微信服务器发起请求,换取到用户的唯一标识openid和会话密钥session_key。 - **登录态维持**:开发者服务器根据openid和session_key生成自定义登录态(如token),返回给小程序客户端。 - **后续请求验证**:小程序携带token向服务器发起请求,服务器验证token有效性,进行业务处理。 ##### 1.2 `web-view`组件与微信登录 `web-view`是小程序提供的一个用于承载网页的容器,可以加载任意的网页内容。然而,直接在`web-view`中执行微信登录流程存在挑战,因为`web-view`加载的网页与小程序主体环境隔离,无法直接调用小程序的`wx.login()`接口。因此,通常的做法是结合使用小程序原生页面和`web-view`。 #### 二、实现策略 ##### 2.1 预处理:在原生页面获取登录态 在跳转到包含`web-view`的页面之前,首先在小程序原生页面中完成登录流程,获取到必要的登录态信息(如token)。这可以通过以下步骤实现: 1. **引导用户登录**:在小程序首页或登录页引导用户点击登录按钮。 2. **调用`wx.login()`**:用户点击后,小程序调用`wx.login()`获取code。 3. **发送code到服务器**:将code发送到开发者服务器,换取openid、session_key及自定义登录态token。 4. **保存token**:将返回的token保存在小程序的本地存储中,以便后续使用。 5. **跳转至`web-view`页面**:登录成功后,根据业务需求跳转到包含`web-view`的页面。 ##### 2.2 在`web-view`页面中使用登录态 由于`web-view`加载的是外部网页,无法直接访问小程序的本地存储,因此需要通过其他方式将登录态传递给`web-view`加载的网页。常见的方法有以下几种: 1. **URL参数传递**:将token作为URL的一部分传递给`web-view`加载的网页。这种方法简单直接,但需注意URL长度限制及安全性问题(避免token泄露)。 ```html <web-view src="https://yourdomain.com/page?token={{token}}"></web-view> ``` 2. **PostMessage通信**:通过小程序的`postMessage`接口向`web-view`发送消息,`web-view`中的网页通过监听`message`事件接收。这种方法更为安全,但需要网页端支持相应的消息监听逻辑。 小程序端: ```javascript const webView = this.selectComponent('#myWebView'); webView.postMessage({ data: { token: wx.getStorageSync('token') } }); ``` 网页端(JavaScript): ```javascript window.addEventListener('message', function(e) { const { data } = e.data; if (data && data.token) { // 使用token进行后续操作 } }); ``` 3. **Cookie或SessionStorage**:如果网页和服务器支持,可以将token存储在用户的Cookie或SessionStorage中,这样网页在加载时就能自动获取到token。但这种方法需要服务器和网页端的配合,且存在跨域问题需解决。 #### 三、安全性考虑 在实现微信登录并通过`web-view`传递登录态的过程中,安全性是首要考虑的问题。以下是一些安全建议: - **HTTPS使用**:确保所有涉及敏感数据传输的接口都使用HTTPS协议,防止数据被中间人截取。 - **Token有效期管理**:为token设置合理的有效期,并定期更新。过期后要求用户重新登录。 - **敏感信息加密**:对token等敏感信息进行加密处理,避免直接暴露在URL或消息中。 - **验证来源**:在接收消息或处理URL参数时,验证消息的来源或参数的合法性,防止恶意请求。 - **最小化权限**:遵循最小权限原则,只请求必要的用户信息,减少数据泄露风险。 #### 四、调试与优化 - **调试技巧**:利用微信开发者工具的`Console`面板查看`web-view`中的JavaScript错误和日志信息,或使用远程调试功能直接在PC上调试网页代码。 - **性能优化**:注意`web-view`加载的网页体积,避免加载过大的资源影响页面性能。同时,优化登录流程,减少用户等待时间。 - **兼容性测试**:由于`web-view`加载的是网页,需要测试在不同浏览器和设备上的兼容性问题,确保登录流程的稳定性和用户体验。 #### 五、总结 在微信小程序中使用`web-view`组件实现微信登录,需要结合小程序原生页面和网页端的技术。通过合理的策略将登录态传递给`web-view`加载的网页,并确保整个过程的安全性,是实现这一目标的关键。同时,注意调试与优化,确保登录流程的顺畅和用户体验的提升。希望本章节的内容能为你在微信小程序全栈开发中的实践提供有益的参考和帮助。
上一篇:
34 | web-view(七):实现微信用户一键登录
下一篇:
36 | web-view(九):web-view组件在开发的常见问题讲解
该分类下的相关小册推荐:
微信小程序与云开发(下)
微信小程序与云开发(上)
微信小程序全栈开发实战(下)
微信小程序全栈开发实战(中)
微信小程序与云开发(中)
微信小程序底层框架实现原理