Flutter JWT处理插件jwt_io的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter JWT处理插件jwt_io的使用

JWT_IO简介

pub build coverage license

JSON Web Tokens(JWT)是一种开放的行业标准(RFC 7519),用于在双方之间安全地表示声明。jwt_io 插件允许你在Flutter项目中解码、验证和生成JWT。

入门指南

解码一个Token

import 'package:jwt_io/jwt_io.dart';

void main() {
  String yourToken = "Your JWT";
  Map<String, dynamic> decodedToken = JwtToken.payload(yourToken);

  /*
  如果Token格式有效,你将得到一个Map<String, dynamic>
  解码后的Token可能如下所示:
  {
     "sub": "1234567890",
     "name": "John Doe",
     "iat": 1516239022,
  }
  */
}

判断Token是否过期

import 'package:jwt_io/jwt_io.dart';

void main() {
  String yourToken = "Your JWT";
  bool hasExpired = JwtToken.isExpired(yourToken);

  // 返回true或false
  // true: Token已过期
  // false: Token未过期
}

获取过期日期

import 'package:jwt_io/jwt_io.dart';

void main() {
  String yourToken = "Your JWT";
  DateTime expirationDate = JwtToken.getExpirationDate(yourToken);

  // 输出示例:2025-01-13 13:04:18.000
  print(expirationDate);
}

查看Token的有效时间

import 'package:jwt_io/jwt_io.dart';

void main() {
  String yourToken = "Your JWT";
  Duration tokenTime = JwtToken.getTokenTime(yourToken);

  // 输出Token的有效天数
  print(tokenTime.inDays);
}

示例代码

以下是一个完整的示例demo,展示了如何使用jwt_io插件来处理JWT:

import 'package:jwt_io/jwt_io.dart';

void main() {
  const token =
      "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikd1c3Rhdm8iLCJpYXQiOjE1MTYyMzkwMjIsImV4cCI6NDczNDYxNTg1OH0.hh-TTBPS8z-UxdmfXWn7AwW2y_Lq3aPnlIQdqV2KEC4";

  /* decode()方法会解码你的Token的payload */
  final decodedToken = JwtToken.payload(token);
  // 现在你可以使用解码后的Token
  print(decodedToken["name"]);

  /* isExpired() - 你可以使用这个方法来判断Token是否已经过期。
  这个方法对于处理用户会话非常有用,可以确保用户在Token过期时重新认证 */
  final isTokenExpired = JwtToken.isExpired(token);

  if (!isTokenExpired) {
    // 用户需要重新认证
  }

  /* getExpirationDate() - 这个方法返回Token的过期日期 */
  final expirationDate = JwtToken.getExpirationDate(token);

  // 输出示例:2025-01-13 13:04:18.000
  print(expirationDate);

  /* getTokenTime() - 你可以使用这个方法来查看Token的有效时间 */
  final tokenTime = JwtToken.getTokenTime(token);

  // 输出Token的有效天数
  print(tokenTime.inDays);
}

通过以上内容,你应该能够在Flutter项目中顺利使用jwt_io插件进行JWT的处理了。如果你有任何问题或者需要进一步的帮助,请随时提问!


更多关于Flutter JWT处理插件jwt_io的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JWT处理插件jwt_io的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用jwt_io插件来处理JWT(JSON Web Tokens)的示例代码。jwt_io是一个流行的Flutter插件,用于解码、验证和编码JWT。

首先,确保你已经在pubspec.yaml文件中添加了jwt_io依赖项:

dependencies:
  flutter:
    sdk: flutter
  jwt_io: ^x.y.z  # 请使用最新版本号替换x.y.z

然后运行flutter pub get来安装依赖。

示例代码

以下是一个完整的Flutter应用程序示例,展示了如何使用jwt_io插件来解码和验证JWT。

main.dart

import 'package:flutter/material.dart';
import 'package:jwt_io/jwt_io.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('JWT Handling Example'),
        ),
        body: Center(
          child: JwtHandler(),
        ),
      ),
    );
  }
}

class JwtHandler extends StatefulWidget {
  @override
  _JwtHandlerState createState() => _JwtHandlerState();
}

class _JwtHandlerState extends State<JwtHandler> {
  String jwt = '''
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYzdgIiLCJbmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  '''; // 示例JWT,请使用你的实际JWT替换

  String decodedJwt = '';

  @override
  void initState() {
    super.initState();
    decodeJwt();
  }

  void decodeJwt() async {
    try {
      var decoded = await Jwt.decode(jwt);
      setState(() {
        decodedJwt = decoded.toJson().toString();
      });
    } catch (e) {
      print('Error decoding JWT: $e');
      setState(() {
        decodedJwt = 'Error decoding JWT';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Original JWT:'),
        Text(jwt),
        SizedBox(height: 20),
        Text('Decoded JWT:'),
        Text(decodedJwt),
      ],
    );
  }
}

说明

  1. 依赖安装

    • 确保在pubspec.yaml文件中添加了jwt_io依赖项。
  2. 解码JWT

    • 使用Jwt.decode(jwt)方法来解码JWT字符串。
    • 解码后的JWT对象可以转换为JSON字符串以便显示。
  3. 错误处理

    • 使用try-catch块来捕获并处理解码JWT时可能发生的错误。
  4. UI显示

    • 使用ColumnText组件来显示原始的JWT字符串和解码后的JWT内容。

注意事项

  • 上述示例中的JWT是一个硬编码的示例JWT。在实际应用中,你应该从安全的位置(如服务器响应)获取JWT。
  • jwt_io插件还提供了其他功能,如验证JWT的签名和过期时间等,你可以根据需要进行扩展。

希望这个示例代码能帮助你在Flutter项目中处理JWT。如果有更多问题,欢迎继续提问!

回到顶部