Flutter安全令牌管理插件flutter_secure_token_manager的使用
Flutter安全令牌管理插件flutter_secure_token_manager的使用
安全令牌管理插件是什么?
它的功能
- 安全存储: 安全地存储访问令牌和刷新令牌。
- 高效的令牌刷新: 当令牌过期时,高效地刷新访问令牌,确保即使多个请求同时检测到令牌过期,也只会发出一个刷新请求。
- 令牌过期检查: 提供一种机制来检查令牌是否已过期(仅适用于JWT)。
实现步骤
-
添加包: 在你的Flutter项目中包含该包。
dependencies: flutter_secure_token_manager: ^latest_version
-
设置登录后的令牌: 每当令牌发生变化时,使用以下代码设置令牌。
FlutterSecureTokenManager().setToken(Token(accessToken, refreshToken));
-
实现令牌过期检查: 如果你的令牌不是JWT,设置过期检查逻辑(通常在开始时进行一次)。
FlutterSecureTokenManager().isTokenExpired = (accessToken) async { // 你的逻辑在这里 // 返回true或false };
-
令牌刷新逻辑: 实现当令牌过期时刷新令牌的逻辑。
FlutterSecureTokenManager().onTokenExpired = (refreshToken) async { // 你的逻辑在这里,使用refreshToken获取新的访问令牌 // 返回新令牌 };
-
访问令牌检索: 在需要访问令牌的地方使用以下代码。该包将自动处理刷新。
headers: { "Authorization": "Bearer ${await FlutterSecureTokenManager().getAccessToken()}" }
注意:请确保这些步骤适当地集成到你的应用程序流程中,特别是在登录过程和进行身份验证请求之前。
🚀 积极寻求反馈和建议,以进一步增强此插件的价值!分享你的想法以贡献其改进。如果你有任何问题或遇到问题,请随时联系。祝你编程愉快! 🙌
### 示例代码
#### `example/lib/main.dart`
```dart
import 'package:example/home_screen.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const TokenManagerDemoApp());
}
class TokenManagerDemoApp extends StatelessWidget {
const TokenManagerDemoApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: "Flutter Secure Token Manager Demo",
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomeScreen(),
);
}
}
更多关于Flutter安全令牌管理插件flutter_secure_token_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安全令牌管理插件flutter_secure_token_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_secure_token_manager
插件来管理安全令牌的代码示例。flutter_secure_token_manager
是一个 Flutter 插件,用于在 Android 和 iOS 上安全地存储和管理令牌。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_secure_token_manager
依赖:
dependencies:
flutter:
sdk: flutter
flutter_secure_token_manager: ^latest_version # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个简单的示例代码,展示如何使用 flutter_secure_token_manager
存储和检索安全令牌。
import 'package:flutter/material.dart';
import 'package:flutter_secure_token_manager/flutter_secure_token_manager.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Secure Token Manager Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final FlutterSecureTokenManager _tokenManager = FlutterSecureTokenManager();
String _retrievedToken = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Secure Token Manager Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Stored Token:',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 10),
Text(
_retrievedToken,
style: TextStyle(fontSize: 16),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
String token = 'your_secure_token_here'; // 替换为你的安全令牌
bool isStored = await _tokenManager.storeToken(key: 'authToken', token: token);
if (isStored) {
setState(() {
_retrievedToken = 'Token stored successfully!';
});
// 检索并显示令牌
String retrievedToken = await _tokenManager.retrieveToken(key: 'authToken');
setState(() {
_retrievedToken = retrievedToken ?? 'No token retrieved';
});
} else {
setState(() {
_retrievedToken = 'Failed to store token';
});
}
},
child: Text('Store and Retrieve Token'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
bool isDeleted = await _tokenManager.deleteToken(key: 'authToken');
if (isDeleted) {
setState(() {
_retrievedToken = 'Token deleted successfully!';
});
} else {
setState(() {
_retrievedToken = 'Failed to delete token';
});
}
},
child: Text('Delete Token'),
),
],
),
),
);
}
}
在这个示例中:
- 我们创建了一个 Flutter 应用,包含一个主页面
MyHomePage
。 - 在
MyHomePage
中,我们实例化了一个FlutterSecureTokenManager
对象。 - 我们提供了两个按钮,一个用于存储和检索令牌,另一个用于删除令牌。
- 当用户点击“Store and Retrieve Token”按钮时,令牌将被存储,并立即尝试检索和显示。
- 当用户点击“Delete Token”按钮时,将尝试删除存储的令牌。
请确保在实际应用中,不要将敏感信息硬编码到代码中,而是从安全的来源获取令牌,例如服务器响应或用户输入。