Flutter安全令牌管理插件flutter_secure_token_manager的使用

Flutter安全令牌管理插件flutter_secure_token_manager的使用

安全令牌管理插件是什么?

它的功能

  • 安全存储: 安全地存储访问令牌和刷新令牌。
  • 高效的令牌刷新: 当令牌过期时,高效地刷新访问令牌,确保即使多个请求同时检测到令牌过期,也只会发出一个刷新请求。
  • 令牌过期检查: 提供一种机制来检查令牌是否已过期(仅适用于JWT)。

实现步骤

  1. 添加包: 在你的Flutter项目中包含该包。

    dependencies:
      flutter_secure_token_manager: ^latest_version
    
  2. 设置登录后的令牌: 每当令牌发生变化时,使用以下代码设置令牌。

    FlutterSecureTokenManager().setToken(Token(accessToken, refreshToken));
    
  3. 实现令牌过期检查: 如果你的令牌不是JWT,设置过期检查逻辑(通常在开始时进行一次)。

    FlutterSecureTokenManager().isTokenExpired = (accessToken) async {
      // 你的逻辑在这里
      // 返回true或false
    };
    
  4. 令牌刷新逻辑: 实现当令牌过期时刷新令牌的逻辑。

    FlutterSecureTokenManager().onTokenExpired = (refreshToken) async {
       // 你的逻辑在这里,使用refreshToken获取新的访问令牌
       // 返回新令牌
    };
    
  5. 访问令牌检索: 在需要访问令牌的地方使用以下代码。该包将自动处理刷新。

    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

1 回复

更多关于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'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个 Flutter 应用,包含一个主页面 MyHomePage
  2. MyHomePage 中,我们实例化了一个 FlutterSecureTokenManager 对象。
  3. 我们提供了两个按钮,一个用于存储和检索令牌,另一个用于删除令牌。
  4. 当用户点击“Store and Retrieve Token”按钮时,令牌将被存储,并立即尝试检索和显示。
  5. 当用户点击“Delete Token”按钮时,将尝试删除存储的令牌。

请确保在实际应用中,不要将敏感信息硬编码到代码中,而是从安全的来源获取令牌,例如服务器响应或用户输入。

回到顶部