Getx学习笔记之中间件鉴权

目录

前言

一、实现步骤

1.添加依赖

2.创建鉴权中间件

3.定义路由

4.设置初始路由

5.模拟登陆状态

二、Getx鉴权步骤总结

三、本文demo示例

四、参考文章


前言

        在 Flutter 中,使用 GetX 可以很方便地实现中间件鉴权(Authentication)。中间件可以在导航之前拦截路由请求,并进行相应的处理,例如检查用户是否已登录。如果未登录,则可以重定向到登录页面。

        本文通过一个登陆页面的例子,介绍下Getx如何实现中间件鉴权。

一、实现步骤

        我们看一下我们要实现的页面:

图1.鉴权页面

1.添加依赖

        在 pubspec.yaml 文件中添加 GetX 依赖:

dependencies:
  flutter:
    sdk: flutter
  get: ^4.6.6

shared_preferences: ^2.2.3

2.创建鉴权中间件

        创建一个中间件类,用于检查用户的登录状态。

        这里是模仿登陆页面,登陆成功之后把登陆成功之后的标记使用SharedPreference保存在本地。中间类从本地读取这个标记,如果没有登陆,重定向到登陆页面。

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../routes.dart';class AuthMiddleware extends GetMiddleware {@overrideRouteSettings? redirect(String? route) {// 检查用户是否已登录// 从 SharedPreferences 中获取登录状态SharedPreferences.getInstance().then((prefs) {bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;if (!isLoggedIn) {return const RouteSettings(name: Routes.login); // 重定向到登录页面}return null; // 继续导航});return null; // 继续导航}
}

3.定义路由

        在路由配置中应用中间件。

        这里仅有两个页面,首页和登陆页面。实际开发的过程中可能页面比较多,有些页面即使不登录也可以进入,有些页面必须登陆之后才能进入。

import 'package:get/get.dart';
import 'package:your_app_name/middlewares/auth_middleware.dart';
import 'package:your_app_name/pages/home_page.dart';
import 'package:your_app_name/pages/login_page.dart';class Routes {static const home = '/home';static const login = '/login';static final routes = [GetPage(name: home,page: () => HomePage(),middlewares: [AuthMiddleware()], // 应用鉴权中间件),GetPage(name: login,page: () => LoginPage(),),];
}

4.设置初始路由

        在应用程序的入口文件中,设置 GetX 路由。

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:your_app_name/routes/routes.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return GetMaterialApp(initialRoute: Routes.home,getPages: Routes.routes,);}
}

5.模拟登陆状态

        在实际应用中,你可能会从持久存储(如 SharedPreferences)或服务器端获取用户的登录状态。以下是一个简单的示例,这里仅做演示,逻辑比较简单,用户输入用户名和密码之后,默认用户登录,并且把登陆的凭证保存在本地,同时在应用启动时检查登录状态:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:your_app_name/routes/routes.dart';void main() async {WidgetsFlutterBinding.ensureInitialized();final prefs = await SharedPreferences.getInstance();final isLoggedIn = prefs.getBool('isLoggedIn') ?? false;runApp(MyApp(isLoggedIn: isLoggedIn));
}class MyApp extends StatelessWidget {final bool isLoggedIn;MyApp({required this.isLoggedIn});@overrideWidget build(BuildContext context) {return GetMaterialApp(initialRoute: isLoggedIn ? Routes.home : Routes.login,getPages: Routes.routes,);}
}

二、Getx鉴权步骤总结

        1.自定义一个AuthMiddleware类:实现自定义的中间件类 AuthMiddleware,继承 GetMiddleware。在 redirect 方法中检查用户的登录状态,若未登录则重定向到登录页面。

        2.Routes:定义应用的路由配置,在需要鉴权的路由上应用 AuthMiddleware。

        3.使用 GetMaterialApp 设置路由和初始页面,根据用户的登录状态设置初始路由。

        通过上述步骤,你可以在 GetX 中实现中间件鉴权,确保未登录用户无法访问需要鉴权的页面。根据实际需求,你可以进一步完善鉴权逻辑,例如集成第三方认证服务、处理不同类型的用户权限等。

三、本文demo示例

        本文的代码在这里。

四、参考文章

1.Getx官方文档

2.Getx路由鉴权

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

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

相关文章

MySQL生产环境迁移至YashanDB数据库深度体验

前言 首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《MySQL生产环境迁移至YashanDB数据库深度体验》(作者:呆呆的私房菜),满满…

Python简化命令行界面库之fire使用详解

概要 在开发命令行工具时,开发者通常需要编写大量代码来解析命令行参数,这既耗时又容易出错。Python Fire 是 Google 开源的一个库,旨在简化命令行界面的开发。它可以将任何 Python 对象自动生成一个命令行界面,从而大大减少了开发时间和代码复杂度。本文将详细介绍 Pytho…

Elasticsearch基础(五):使用Kibana Discover探索数据

文章目录 使用Kibana Discover探索数据 一、添加样例数据 二、数据筛选 使用Kibana Discover探索数据 一、添加样例数据 登录Kibana。在Kibana主页的通过添加集成开始使用区域,单击试用样例数据。 在更多添加数据的方式页面下方,单击其他样例数据集…

Vscode+Pyside6开发之虚拟环境配置以及错误解决

Pyside开发之虚拟环境配置以及错误解决 开发环境一、项目创建以及虚拟环境设置1.创建项目2. 新建py文件,新建虚拟环境3.激活虚拟环境二、项目位置改变pip命令报错1.删除原来的虚拟环境2. 产生包列表文件requirements.txt3.重新创建虚拟环境4.重新安装包文件5.其他错误开发环境…

Notepad++换安装路径之后,右键打开方式报错:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。的处理方法

把Notepad添加到右键打开方式,可以参考下面的3篇文章添加: https://blog.csdn.net/xiaoerbuyu1233/article/details/88287747 https://blog.csdn.net/qq_44000337/article/details/120277317 https://www.cnblogs.com/zhrngM/p/12899026.html 这里主要是…

谷歌浏览器自动填充密码时,el-input样式错乱

使用到谷歌浏览器的记忆功能,选择的内容为浏览器保存的内容时 会导致element-plus的el-input样式改变 只需要增加一个css样式,就可以解决问题 :deep .el-input__inner {box-shadow: 0 0 0 1000px #fff inset; }修改后

上位机图像处理和嵌入式模块部署(香橙派AI Pro开发板试用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和工控机相比较,linux嵌入式开发板使用上面方便很多、也容易很多。很多的第三方库都可以通过yum、apt-get这样的方法直接下载到,不需要自己通过源代码重新进行编译、安装。因为自…

Java基础知识之 使用 Cleaner 替代 finalize

Object.finalize 方法 在 Java 中,一个对象如果不再使用,那么它就会在 JVM 垃圾回收时,进行析构释放该对象占用的内存空间。但如果这个对象持有了一些其他需要进行额外处理的资源(非堆内存资源),那么就得考…

SSR理解(vite与nuxt比较)

一、SSR的概念与理解(什么是SSR?) 定义:SSR是指在服务器端完成页面的渲染工作,将最终生成的HTML内容发送给浏览器。 简单来说,就是在服务器端将网页内容渲染成HTML,然后将这个渲染好的HTML发送到客户端,也就是我们的…

网络安全-等级保护制度介绍

一、等保发展历程 (1)1994国务院147号令 第一次提出等级保护概念,要求对信息系统分等级进行保护 (2)1999年GB17859 国家强制标准发布,信息系统等级保护必须遵循的法规 (3)2005年公安…

二、BIO、NIO、直接内存与零拷贝

一、网络通信编程基础 1、Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口,由操作系统提供; Socket将复杂的TCP/IP协议处理和通信缓存管理都隐藏在接口后面,对用户来说就是使用简单的接口进行网络应用编程…

OPC UA边缘计算耦合器BL205工业通信的最佳解决方案

OPC UA耦合器BL205是钡铼技术基于下一代工业互联网技术推出的分布式、可插拔、结构紧凑、可编程的IO系统,可直接接入SCADA、MES、MOM、ERP等IT系统,无缝链接OT与IT层,是工业互联网、工业4.0、智能制造、数字化转型解决方案中IO系统最佳方案。…

Quartus II 13.1添加新的FPGA器件库

最近需要用到Altera的一款MAX II 系列EPM240的FPGA芯片,所以需要给我的Quartus II 13.1添加新的器件库,在此记录一下过程。 1 下载所需的期间库 进入Inter官网,(Altera已经被Inter收购)https://www.intel.cn/content…

web安全之SQL手工注入漏洞测试

一、目的 1.掌握SQL注入原理; Sql注入详解(原理篇)_sql注入攻击的原理-CSDN博客 2.了解手工注入的方法; 3.了解MySQL的数据结构; 4.了解字符串的MD5加解密 二、过程 1.进去后出现以下界面 找注入点 发现有注入点,即id被代入执…

华清数据结构day3 24-7-18

基于昨天代码增加增删改查功能 zy.h #ifndef ZY_H #define ZY_H #define MAX 100 //最大容量 //定义学生类型 struct Stu {char name[20];int age;double score; }; //定义班级类型 struct Class {struct Stu student[MAX]; //存放学生的容器int size; //实际…

Mysql —— 事务

目录 什么是事务? 两种方式实现事务: 方法一 方法二: 事务四大特性(简称ACID) 并发事务问题(面试题) 事务隔离级别 什么是事务? 事务是一组操作的集合,它是一个不可分割的工作单位&#xff…

Web开发:ASP.NET CORE前后端交互之AJAX(含基础Demo)

目录 一、后端 二、前端 三、代码位置 四、实现效果 五、关键的点 1.后端传输给前端: 2.前端传输给后端 一、后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using WebAppl…

StarRocks on AWS Graviton3,实现 50% 以上性价比提升

在数据时代,企业拥有前所未有的大量数据资产,但如何从海量数据中发掘价值成为挑战。数据分析凭借强大的分析能力,可从不同维度挖掘数据中蕴含的见解和规律,为企业战略决策提供依据。数据分析在营销、风险管控、产品优化等领域发挥…

使用 spring MVC 简单的案例 (1)计算器

一、计算器 1.1前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> …

签名优化:请求数据类型不是`application/json`,将只对随机数进行签名计算,例如文件上传接口。

文章目录 I 签名进行请求数据类型类型判断1.1 常见的ContentType1.2 签名切面处理1.3 文件上传案例1.4 处理接口信息背景: 文件上传接口的请求数据类型通常为multipart/form-data,方便携带文本域和使用接口文档进行调试。 如果携带JSON数据,不方便调试接口。 前端数据也要特…