webview_flutter_wkwebview3.17.0 --Cookie认证

场景描述:
flutter app 中,也就是使用flutter框架搭建的移动app,已经设置了用户登录。
那么使用flutter webview html 页面时,也可以通过本地的登录信息来进行这个html页面的登录。
webview 就是通过模拟浏览器的方式来在应用中打开html页面。
使用移动app 中的登录数据来 进行登录 这个html 页面,那么用户就不需要手动二次登录了。

用户打开 Flutter 应用
用户输入用户名和密码
应用向后端发送登录请求
后端验证成功?
后端返回 auth_token
应用将 auth_token 存储到本地
用户点击进入 WebView 页面
从本地读取 auth_token
设置 WebView Cookie
初始化 WebView 并加载目标 URL
WebView 发送请求时附加 Cookie
后端验证 Cookie 成功?
后端返回 HTML 页面内容
后端返回登录页面
用户访问 HTML 页面, 无需二次登录
用户需要手动登录
1用户登录移动应用:用户在 Flutter 应用中完成登录流程,输入用户名和密码。应用向后端服务器发送登录请求,后端验证成功后返回认证信息(如 auth_token 或 session_id)。应用将认证信息存储在本地(如 SharedPreferences 或 SecureStorage)。2加载 WebView:用户在 Flutter 应用中点击某个按钮或链接,触发加载 WebView 的操作。WebView 需要加载一个需要认证的 HTML 页面(例如 https://www.company.com/dashboard)。3传递认证信息:从本地存储中读取用户的认证信息(如 auth_token)。通过技术手段(如设置 Cookie 或注入 JavaScript)将认证信息传递给 WebView。4自动登录 HTML 页面:WebView 加载目标 URL 时,认证信息会被自动附加到请求中。后端服务器验证认证信息,如果有效,则允许用户访问 HTML 页面,无需手动登录。5用户体验:用户无需在 WebView 中再次输入用户名和密码,实现了无缝的登录体验。完整的执行流程
1用户登录移动应用:用户输入用户名和密码,点击登录按钮。应用向后端发送登录请求,获取 auth_token 并存储在本地。2触发 WebView 加载:用户在应用中点击某个按钮,触发加载 WebView 的操作。3设置 Cookie:从本地存储中读取 auth_token。使用 WebViewCookieManager 设置 Cookie。4加载 HTML 页面:初始化 WebViewController 并加载目标 URL。WebView 加载页面时,Cookie 会被自动附加到请求中。5后端验证:后端服务器接收到请求后,验证 Cookie 中的 auth_token。如果验证通过,返回 HTML 页面内容;否则,返回登录页面。6用户访问页面:用户无需手动登录,直接访问 HTML 页面。

webview_flutter_wkwebview3.17.0 --Cookie认证

企业应用集成:

// 设置Cookie认证
cookieManager.setCookie(WebViewCookie(name: 'auth_token',value: 'xxxx',domain: '.company.com'
));

webview_flutter_wkwebview 是一个用于在 Flutter 应用中嵌入 WebView 的插件,特别适用于 iOS 平台。3.17.0 是该插件的一个版本号。在企业应用集成中,设置 Cookie 是一种常见的需求,特别是在需要用户认证的场景中。通过设置 Cookie,可以在 WebView 中自动传递认证信息,避免用户重复登录。

使用场景

在企业应用中,通常会有一个 Web 应用(如公司内部的管理系统、CRM 系统等),用户需要通过移动应用访问这些 Web 应用。为了确保用户在移动应用中已经登录,可以通过设置 Cookie 的方式将用户的认证信息传递给 WebView,从而实现无缝的认证流程。

详细调用方法

1添加依赖:
首先,在 pubspec.yaml 文件中添加 webview_flutter 依赖:

dependencies:flutter:sdk: flutterwebview_flutter: ^3.0.0
  1. 导入包:
    在 Dart 文件中导入 webview_flutter 包:
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_wkwebview/webview_cookie_manager.dart';
  1. 设置 Cookie:
    使用 WebViewCookieManager 来设置 Cookie。以下是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_wkwebview/webview_cookie_manager.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: WebViewExample(),);}
}class WebViewExample extends StatefulWidget {_WebViewExampleState createState() => _WebViewExampleState();
}class _WebViewExampleState extends State<WebViewExample> {late WebViewController _controller;final WebViewCookieManager cookieManager = WebViewCookieManager();void initState() {super.initState();_setCookie();}Future<void> _setCookie() async {await cookieManager.setCookie(WebViewCookie(name: 'auth_token',value: 'xxxx', // 替换为实际的认证 tokendomain: '.company.com', // 替换为实际的域名));// 初始化 WebView 控制器_controller = WebViewController()..setJavaScriptMode(JavaScriptMode.unrestricted)..setNavigationDelegate(NavigationDelegate(onPageFinished: (String url) {print('Page finished loading: $url');},),)..loadRequest(Uri.parse('https://www.company.com')); // 替换为实际的 URL}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('WebView Example'),),body: WebView(controller: _controller,),);}
}

设置流程

  1. 初始化 WebViewCookieManager:
    在 initState 中初始化 WebViewCookieManager,并调用 setCookie 方法设置 Cookie。

  2. 设置 Cookie:
    使用 setCookie 方法设置 Cookie,确保在 WebView 加载页面之前完成。

  3. 加载 WebView:
    在设置完 Cookie 后,初始化 WebViewController 并加载目标 URL。

组件中的执行流程

  1. 初始化阶段:
  • initState 被调用,初始化 WebViewCookieManager 并设置 Cookie。

  • 设置完 Cookie 后,初始化 WebViewController 并加载目标 URL。

  1. 页面加载阶段:
  • WebView 开始加载页面,Cookie 会被自动附加到请求中。

  • 当页面加载完成时,onPageFinished 回调被触发。

  1. 生命周期:
  • initState:组件初始化时调用,用于设置 Cookie 和初始化 WebView。

  • build:构建 UI,显示 WebView。

  • dispose:组件销毁时调用,用于释放资源。

注意事项

  • Cookie 的域:确保设置的 Cookie 域与 WebView 加载的 URL 域匹配,否则 Cookie 不会被发送。

  • 认证 Token:value 应该是实际的认证 token,通常由后端生成并在用户登录后返回。

  • WebView 初始化:确保在设置完 Cookie 后再初始化 WebView,否则 Cookie 可能不会生效。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ 架构分析

文章目录 前言一、RabbitMQ架构分析1、Broker2、Vhost3、Producer4、Messages5、Connections6、Channel7、Exchange7、Queue8、Consumer 二、消息路由机制1、Direct Exchange2、Topic Exchange3、Fanout Exchange4、Headers Exchange5、notice5.1、备用交换机&#xff08;Alter…

【Uniapp-Vue3】setTabBar设置TabBar和下拉刷新API

一、setTabBar设置 uni.setTabBarItem({ index:"需要修改第几个", text:"修改后的文字内容" }) 二、tabBar的隐藏和显式 // 隐藏tabBar uni.hideTabBar(); // 显示tabBar uni.showTabBar(); 三、为tabBar右上角添加文本 uni.setTabBarBadge({ index:"…

routeros7 adguardhome添加规则报错certificate expired

mikrokit routeros 7添加adguardhome容器。 /container/add remote-imageadguard/adguardhome:latest interfaceveth1 root-dircontainer/adgurdhome loggingyes结果发现添加不了规则&#xff0c;报证书过期。 Error: control/filtering/add_url | Couldn’t fetch filter fro…

壁纸设计过程中如何增加氛围感

在壁纸设计过程中&#xff0c;增加氛围感是提升整体视觉效果和情感传达的关键。以下是一些具体的方法和技巧&#xff0c;帮助你在设计中营造出强烈的氛围感&#xff1a; 一、色彩运用 选择主题色&#xff1a; 根据你想要传达的情感选择主色调。例如&#xff0c;温暖的色调&…

RabbitMQ模块新增消息转换器

文章目录 1.目录结构2.代码1.pom.xml 排除logging2.RabbitMQConfig.java3.RabbitMQAutoConfiguration.java 1.目录结构 2.代码 1.pom.xml 排除logging <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…

2024年度总结:技术探索与个人成长的交织

文章目录 前言年度创作回顾&#xff1a;技术深耕与分享数据库技术&#xff1a;MySQL 与 MyBatisJava 及相关技术栈计算机网络&#xff1a;构建网络知识体系思维方式的转变&#xff1a;构建技术知识体系的桥梁 项目实践&#xff1a;人工智能与智慧医疗的碰撞生活与博客的融合与平…

python:taichi 模拟一维波场

在 Taichi 中模拟一维波场&#xff0c;通常是利用 Taichi 编程语言的特性来对一维空间中的波动现象进行数值模拟&#xff0c;以下是相关介绍&#xff1a; 原理基础 波动方程&#xff1a;一维波动方程的一般形式为 &#xff0c;其中 u(x,t) 表示在位置x 和时间t 处的波的状态&…

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪&#xff0c;使用光强和温度作为影响因素&#xff0c;电压作为输出进行建模。…

深入MapReduce——引入

引入 前面我们已经深入了HDFS的设计与实现&#xff0c;对于分布式系统也有了不错的理解。 但HDFS仅仅解决了海量数据存储和读写的问题。要想让数据产生价值&#xff0c;一定是需要从数据中挖掘出价值才行&#xff0c;这就需要我们拥有海量数据的计算处理能力。 下面我们还是…

Vue 引入及简单示例

Vue 渐进式JavaScript 框架 学习笔记 - Vue 引入及简单示例 目录 与jquery区别 Vue引入 两种方式引入 下载到本地 代码结构 简单示例 Style中引入vue.js 对vue语法进行解析 对三目运算符支持 设置变量&#xff08;状态&#xff09; 总结 与jquery区别 不需要手动操…

系统思考—问题分析

很多中小企业都在面对转型的难题&#xff1a;市场变化快&#xff0c;资源有限&#xff0c;团队协作不畅……这些问题似乎总是困扰着我们。就像最近和一位企业主交流时&#xff0c;他提到&#xff1a;“我们团队每天都很忙&#xff0c;但效率始终没见提升&#xff0c;感觉像是在…

π0:仅有3B数据模型打通Franka等7种机器人形态适配,实现0样本的完全由模型自主控制方法

Chelsea Finn引领的Physical Intelligence公司&#xff0c;专注于打造先进的机器人大模型&#xff0c;近日迎来了一个令人振奋的里程碑。在短短不到一年的时间内&#xff0c;该公司成功推出了他们的首个演示版本。这一成就不仅展示了团队的卓越技术实力&#xff0c;也预示着机器…

第二十一周:Mask R-CNN

Mask R-CNN 摘要Abstract文章信息研究动机Mask RCNNRoIPool与RoIAlign 双线性插值Mask Branch(FCN)其他细节Mask RCNN损失Mask分支预测 网络搭建创新点与不足总结 摘要 本篇博客介绍了Mask R-CNN&#xff0c;这是一种用于实例分割的模型&#xff0c;能够在目标检测的基础上实现…

Windows本地部署(DeepSeek-R1-Distill-Qwen-1.5B)模型

文章目录 Windows本地部署&#xff08;DeepSeek-R1-Distill-Qwen-1.5B&#xff09;模型本机环境运行环境安装安装 WSL2&#xff0c;启用linux 系统进入linux 系统后&#xff0c;安装以下软件安装 Anaconda3安装 CUDA安装 pip创建虚拟环境并安装 vllm 模型下载模型运行部署模型测…

Java 大视界 -- Java 大数据在元宇宙中的关键技术与应用场景(65)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

【QT】 控件 -- 显示类

&#x1f525; 目录 [TOC]( &#x1f525; 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 &#x1f525; 1. 前言 之前我在上一篇文章【QT】…

大数据之路:阿里巴巴大数据实践(1)

第一章 总述 第二章 日志采集 2.1 浏览器的页面日志采集 览器的页面型产品/服务的日志采集可分为如下两大类 &#xff08;1&#xff09;页面浏览&#xff08;展现&#xff09;日志采集。顾名思义&#xff0c;页面浏览日志是指&#xff1a;一个页面被浏览器加载呈现时采集的日…

定时器按键tim_key模版

低优先级放在高优先级内势必是程序卡死 把高优先级放到低优先级内&#xff0c;会使程序卡死 可修改 Debuger调试方法 Pwm rcc #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPI…

Linux的权限和一些shell原理

目录 shell的原理 Linux权限 sudo命令提权 权限 文件的属性 ⽂件类型&#xff1a; 基本权限&#xff1a; chmod改权限 umask chown 该拥有者 chgrp 改所属组 最后&#xff1a; 目录权限 粘滞位 shell的原理 我们广义上的Linux系统 Linux内核Linux外壳 Linux严格…

【ComfyUI专栏】ComfyUI 部署Kolors

什么是Kolors?我相信一定会有朋友可能第一次听说这个生图的模型,开始我也很难想象,这竟然是快手推出的可灵AI的项目,我们可以直接利用模型来生成图片和视频。 大家可以通过直接访问可灵AI的网址获取到可灵的项目,但是对于我们来说我们需要基于ComfyUI来生成必要的图片和视…