webview_flutter_wkwebview3.17.0 --Cookie认证

server/2025/2/3 3:48:09/

场景描述:
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.ppmy.cn/server/164509.html

相关文章

【LLM-agent】(task2)用llama-index搭建AI Agent

note LlamaIndex 实现 Agent 需要导入 ReActAgent 和 Function Tool&#xff0c;循环执行&#xff1a;推理、行动、观察、优化推理、重复进行。可以在 arize_phoenix 中看到 agent 的具体提示词&#xff0c;工具被装换成了提示词ReActAgent 使得业务自动向代码转换成为可能&am…

MySQL 高级(进阶) SQL 语句

MySQL 是一种功能强大的关系型数据库管理系统。为了有效地利用其高级功能&#xff0c;需要掌握一些进阶的 SQL 语句和技巧。本文将介绍几种常用的高级 SQL 语句&#xff0c;包括窗口函数、子查询、联合查询、复杂的连接操作以及事务处理等。 1. 窗口函数 窗口函数是一种高级的…

快速分析LabVIEW主要特征进行判断

在LabVIEW中&#xff0c;快速分析程序特征进行判断是提升开发效率和减少调试时间的重要技巧。本文将介绍如何高效地识别和分析程序的关键特征&#xff0c;从而帮助开发者在编写和优化程序时做出及时的判断&#xff0c;避免不必要的错误。 ​ 数据流和并行性分析 LabVIEW的图形…

编程AI深度实战:大模型知识一文打尽

系列文章&#xff1a; 编程AI深度实战&#xff1a;私有模型deep seek r1&#xff0c;必会ollama-CSDN博客 编程AI深度实战&#xff1a;自己的AI&#xff0c;必会LangChain-CSDN博客 编程AI深度实战&#xff1a;给vim装上AI-CSDN博客 编程AI深度实战&#xff1a;火的编程AI&…

[LeetCode]day9 203.移除链表元素

203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], v…

信号处理以及队列

下面是一个使用C和POSIX信号处理以及队列的简单示例。这个示例展示了如何使用信号处理程序将信号放入队列中&#xff0c;并在主循环中处理这些信号。 #include <iostream> #include <csignal> #include <queue> #include <mutex> #include <thread…

动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)

概览检索 动态规划DP 概览&#xff08;点击链接跳转&#xff09; 动态规划DP 背包问题 概览&#xff08;点击链接跳转&#xff09; 完全背包问题 原题链接 AcWiing 3. 完全背包问题 题目描述 有 N种物品和一个容量是 V的背包&#xff0c;每种物品都有无限件可用。 第 i种物…

3b1b线性代数基础

零、写在前面 3b1b之前没认真看&#xff0c;闲了整理整理。 一、向量 学习物理的时候&#xff0c;向量是空间中的箭头。由其方向和长度决定。 学习数据结构的时候&#xff0c;向量是有序的数字列表。向量的每一维度有着不同含义。 线性代数中&#xff0c;我们通常认为**向量…