Flutter邮件OTP认证插件email_otp_auth的使用

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

Flutter邮件OTP认证插件email_otp_auth的使用

📧 Email OTP Auth

电子邮件基于的OTP认证插件,允许开发者发送6位数的OTP到用户的邮箱并验证它以实现无缝的邮箱认证。适用于需要邮箱验证的应用。

🌟 特性

  • ✨ 发送OTP:生成并发送一个6位数的OTP到指定的邮箱地址。
  • ✅ 验证OTP:验证输入的OTP以确认邮箱的真实性。
  • ⚠️ 有效期:OTP将在5分钟后过期。

🚀 安装

pubspec.yaml文件中添加以下内容:

dependencies:
  email_otp_auth: ^1.0.0

然后运行:

flutter pub get

📲 使用

导入包
import 'package:email_otp_auth/email_otp_auth.dart';
发送和验证OTP
import 'package:flutter/material.dart';
import 'package:email_otp_auth/email_otp_auth.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  // 控制器声明
  TextEditingController emailController = TextEditingController();
  TextEditingController otpController = TextEditingController();

  // 清理文本编辑控制器
  [@override](/user/override)
  void dispose() {
    emailController.dispose();
    otpController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // ----------------------
    // 发送OTP的方法
    // ----------------------

    Future<void> sendOtp() async {
      try {
        // 显示 CircularProgressIndicator。
        showDialog(
          context: context,
          builder: (context) {
            return const Center(
              child: CircularProgressIndicator(),
            );
          },
        );

        // 获取sendOTP方法的响应。
        var res = await EmailOtpAuth.sendOTP(email: emailController.text);

        // 弹出CircularProgressIndicator。
        if (context.mounted {
          Navigator.of(context).pop();
        }

        // 如果响应[message == "Email Send"]则...
        if (res["message"] == "Email Send" && context.mounted) {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(
              content: Text("OTP Send Successfully ✅"),
            ),
          );
        }
        // 否则显示无效的邮箱地址。
        else {
          if (context.mounted {
            ScaffoldMessenger.of(context).showSnackBar(
              const SnackBar(
                content: Text("Invalid E-Mail Address ❌"),
              ),
            );
          }
        }
      }
      // 错误处理
      catch (error {
        throw error.toString();
      }
    }

    // ------------------------
    // 验证OTP的方法
    // ------------------------

    Future<void> verifyOTP() async {
      try {
        // 显示 CircularProgressIndicator。
        showDialog(
          context: context,
          builder: (context) {
            return const Center(
              child: CircularProgressIndicator(),
            );
          },
        );

        // 获取sendOTP方法的响应。
        var res = await EmailOtpAuth.verifyOtp(otp: otpController.text);

        // 弹出CircularProgressIndicator。
        if (context.mounted {
          Navigator.of(context).pop();
        }

        // 如果响应[message == "OTP Verified"]则...
        if (res["message"] == "OTP Verified" && context.mounted {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(
              content: Text("OTP verified ✅"),
            ),
          );
        }
        // 如果响应[data == "Invalid OTP"]则...
        else if (res["data"] == "Invalid OTP" && context.mounted {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(
              content: Text("Invalid OTP ❌"),
            ),
          );
        }
        // 如果响应[data == "OTP Expired"]则...
        else if (res["data"] == "OTP Expired" && context.mounted {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(
              content: Text("OTP Expired ⚠️"),
            ),
          );
        }
        // 否则返回无操作。
        else {
          return;
        }
      } catch (error {
        throw error.toString();
      }
    }

    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.deepPurple[2undred],
        title: const Text('Email OTP Auth'),
        centerTitle: true,
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              TextFormField(
                controller: emailController,
                decoration: InputDecoration(
                  hintText: "E-mail",
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(8),
                  ),
                ),
              ),
              const SizedBox(height: 10),
              ElevatedButton(
                onPressed: sendOtp,
                child: const Text('Send OTP'),
              ),
              const SizedBox(height: 220),
              TextFormField(
                controller: otpController,
                decoration: InputDecoration(
                  hintText: "OTP",
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(8),
                  ),
                ),
              ),
              const SizedBox(height: 10),
              ElevatedButton(
                onPressed: verifyOTP,
                child: const Text('Verify OTP'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter邮件OTP认证插件email_otp_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter邮件OTP认证插件email_otp_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 email_otp_auth 插件在 Flutter 中实现邮件 OTP 认证的示例代码。这个插件允许你发送 OTP(一次性密码)到用户的电子邮件地址,并验证该 OTP。

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

dependencies:
  flutter:
    sdk: flutter
  email_otp_auth: ^最新版本号 # 请替换为最新的版本号

然后运行 flutter pub get 来获取依赖。

接下来是一个完整的示例代码,展示了如何使用 email_otp_auth 插件发送 OTP 并验证 OTP。

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final EmailOtpAuth _emailOtpAuth = EmailOtpAuth();
  String _email = '';
  String _otp = '';
  String _status = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Email OTP Auth Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(
                decoration: InputDecoration(labelText: 'Email'),
                onChanged: (value) => setState(() => _email = value),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  setState(() => _status = 'Sending OTP...');
                  try {
                    await _emailOtpAuth.sendOtp(_email);
                    setState(() => _status = 'OTP Sent!');
                  } catch (e) {
                    setState(() => _status = 'Failed to send OTP: $e');
                  }
                },
                child: Text('Send OTP'),
              ),
              SizedBox(height: 16),
              TextField(
                decoration: InputDecoration(labelText: 'OTP'),
                keyboardType: TextInputType.number,
                onChanged: (value) => setState(() => _otp = value),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  setState(() => _status = 'Verifying OTP...');
                  try {
                    bool isVerified = await _emailOtpAuth.verifyOtp(_email, _otp);
                    setState(() => _status = isVerified ? 'OTP Verified!' : 'Invalid OTP');
                  } catch (e) {
                    setState(() => _status = 'Failed to verify OTP: $e');
                  }
                },
                child: Text('Verify OTP'),
              ),
              SizedBox(height: 16),
              Text(
                _status,
                style: TextStyle(fontSize: 18, color: Colors.red),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个简单的 Flutter 应用,包含两个 TextField 用于输入电子邮件和 OTP。
  2. 使用 EmailOtpAuth 类的 sendOtp 方法发送 OTP 到指定的电子邮件地址。
  3. 使用 verifyOtp 方法验证用户输入的 OTP。
  4. 状态 _status 用于显示操作的结果(如 “OTP Sent!”、“OTP Verified!” 或错误信息)。

请注意,这个插件的实际实现可能需要一些后端服务来发送和验证 OTP。你可能需要配置 SMTP 服务器或其他邮件服务来发送邮件。此外,由于 OTP 的安全性和敏感性,确保在生产环境中使用安全的存储和传输机制。

这个示例只是一个基础实现,你可能需要根据实际需求进行进一步的调整和优化。

回到顶部