Flutter一次性密码生成与验证插件smartotp的使用

Flutter一次性密码生成与验证插件smartotp的使用

smartotp.sdk.flutter

本插件用于在Flutter应用中实现一次性密码(OTP)的生成与验证功能。通过此插件,您可以轻松地将OTP功能集成到您的项目中。


Getting started

为了帮助您快速上手,以下是推荐的下一步操作:

  • 已经熟悉Flutter开发?直接编辑此README.md并将其个性化。
  • 如果希望简化流程,可以参考底部的模板!

Add your files

在开始之前,请确保您已经添加了必要的文件到项目中。

  1. 创建或上传文件: 您可以通过以下方式添加文件:

    • 在GitLab的Web编辑器中创建上传文件。
    • 使用命令行工具添加文件。

    示例命令如下:

    cd existing_repo
    git remote add origin https://gitlab.com/mytel3/smartotp.sdk.flutter.git
    git branch -M main
    git push -uf origin main
    

完整示例Demo

以下是一个完整的Flutter示例代码,展示如何使用smartotp插件生成和验证一次性密码。

import 'package:flutter/material.dart';
import 'package:smartotp/smartotp.dart'; // 导入smartotp插件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: OTPExample(),
    );
  }
}

class OTPExample extends StatefulWidget {
  @override
  _OTPExampleState createState() => _OTPExampleState();
}

class _OTPExampleState extends State<OTPExample> {
  String _generatedOTP = ''; // 存储生成的OTP
  String _inputOTP = ''; // 用户输入的OTP
  bool _isVerified = false; // 验证结果

  // 生成OTP
  void _generateOTP() async {
    final otp = await SmartOTP.generate(secretKey: 'your_secret_key'); // 替换为您的密钥
    setState(() {
      _generatedOTP = otp;
    });
  }

  // 验证OTP
  void _verifyOTP() async {
    final isCorrect = await SmartOTP.verify(
      secretKey: 'your_secret_key', // 替换为您的密钥
      otp: _inputOTP,
    );
    setState(() {
      _isVerified = isCorrect;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SmartOTP Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(20.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // 显示生成的OTP
            Text(
              'Generated OTP: $_generatedOTP',
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 20),

            // 输入框用于输入OTP
            TextField(
              onChanged: (value) {
                setState(() {
                  _inputOTP = value;
                });
              },
              decoration: InputDecoration(hintText: 'Enter OTP'),
            ),
            SizedBox(height: 20),

            // 生成OTP按钮
            ElevatedButton(
              onPressed: _generateOTP,
              child: Text('Generate OTP'),
            ),
            SizedBox(height: 20),

            // 验证OTP按钮
            ElevatedButton(
              onPressed: _verifyOTP,
              child: Text('Verify OTP'),
            ),
            SizedBox(height: 20),

            // 显示验证结果
            Text(
              _isVerified ? 'OTP Verified!' : 'OTP Verification Failed!',
              style: TextStyle(
                fontSize: 18,
                color: _isVerified ? Colors.green : Colors.red,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

说明

  1. 安装插件: 在pubspec.yaml文件中添加依赖:
    dependencies:
      smartotp: ^版本号
    

更多关于Flutter一次性密码生成与验证插件smartotp的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter一次性密码生成与验证插件smartotp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


smartotp 是一个 Flutter 插件,用于生成和验证一次性密码(OTP)。它支持基于时间的 OTP(TOTP)和基于计数器的 OTP(HOTP),类似于 Google Authenticator 或其他 OTP 应用程序。

安装 smartotp 插件

首先,你需要在 pubspec.yaml 文件中添加 smartotp 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  smartotp: ^1.0.0  # 请检查最新版本

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

使用 smartotp 插件

1. 生成 OTP

你可以使用 smartotp 生成基于时间(TOTP)或基于计数器(HOTP)的 OTP。

import 'package:smartotp/smartotp.dart';

void generateOTP() async {
  // 生成基于时间的 OTP (TOTP)
  String secret = "JBSWY3DPEHPK3PXP";  // 你的密钥
  int period = 30;  // OTP 有效期,通常为 30 秒
  String totp = await SmartOtp.generateTOTP(secret, period: period);
  print("TOTP: $totp");

  // 生成基于计数器的 OTP (HOTP)
  int counter = 123456;  // 计数器值
  String hotp = await SmartOtp.generateHOTP(secret, counter: counter);
  print("HOTP: $hotp");
}

2. 验证 OTP

你可以使用 smartotp 来验证用户输入的 OTP。

import 'package:smartotp/smartotp.dart';

void verifyOTP() async {
  String secret = "JBSWY3DPEHPK3PXP";  // 你的密钥
  String userInput = "123456";  // 用户输入的 OTP

  // 验证基于时间的 OTP (TOTP)
  bool isTOTPValid = await SmartOtp.verifyTOTP(userInput, secret);
  print("TOTP is valid: $isTOTPValid");

  // 验证基于计数器的 OTP (HOTP)
  int counter = 123456;  // 计数器值
  bool isHOTPValid = await SmartOtp.verifyHOTP(userInput, secret, counter: counter);
  print("HOTP is valid: $isHOTPValid");
}

3. 生成密钥

你可以使用 smartotp 生成一个新的密钥。

import 'package:smartotp/smartotp.dart';

void generateSecret() async {
  String secret = await SmartOtp.generateSecret();
  print("Generated Secret: $secret");
}

注意事项

  • 密钥的安全性:确保密钥的安全性,不要在客户端存储密钥,或者使用加密的方式存储。
  • 时间同步:TOTP 依赖于设备时间的准确性,确保设备时间与服务器时间同步。
  • 计数器管理:HOTP 依赖于计数器,确保计数器的值在客户端和服务器之间保持一致。

示例代码

以下是一个完整的示例,展示了如何生成和验证 OTP:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SmartOTP Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: generateOTP,
                child: Text('Generate OTP'),
              ),
              ElevatedButton(
                onPressed: verifyOTP,
                child: Text('Verify OTP'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void generateOTP() async {
    String secret = "JBSWY3DPEHPK3PXP";
    int period = 30;
    String totp = await SmartOtp.generateTOTP(secret, period: period);
    print("TOTP: $totp");

    int counter = 123456;
    String hotp = await SmartOtp.generateHOTP(secret, counter: counter);
    print("HOTP: $hotp");
  }

  void verifyOTP() async {
    String secret = "JBSWY3DPEHPK3PXP";
    String userInput = "123456";

    bool isTOTPValid = await SmartOtp.verifyTOTP(userInput, secret);
    print("TOTP is valid: $isTOTPValid");

    int counter = 123456;
    bool isHOTPValid = await SmartOtp.verifyHOTP(userInput, secret, counter: counter);
    print("HOTP is valid: $isHOTPValid");
  }
}
回到顶部