Flutter身份验证插件releans_verify的使用

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

Flutter身份验证插件releans_verify的使用

在本插件中,你可以通过releans API发送和验证一次性密码(OTP)。

导入

import 'package:releans_verify/releans.dart';

初始化releans

  1. 复制API密钥从releans仪表板并设置apiKey。
  2. 从releans仪表板创建发送者并设置sender。
  3. 设置重新发送延迟时间(以秒为单位),默认延迟时间为15秒。
void main() async {
  ReleansVerify().init(
      apiKey: "XXXXXXXXXXXXXXXXX",
      sender: "XXXXXXXXX",
      resendingDelayInSeconds: 30
  );

  runApp(MyApp());
}

发送OTP

  1. 使用手机号调用sendCode方法。
  2. 手机号应包含国家代码。
  3. 指定通道,默认为短信。
ReleansResult result =
await ReleansVerify().sendCode(mobile: "+9715200000");

ReleansResult result = await ReleansVerify()
  .sendCode(mobile:"+9715200000",channel: Channel.voice);

监听剩余倒计时时间

  1. 监听ReleansVerify().remainingSeconds以显示剩余秒数。
  2. 如果你想手动取消计时器,调用disposeTimer()。
ValueListenableBuilder<int>(
      valueListenable: ReleansVerify().remainingSeconds,
      builder: (context, value, _) {
      return Text("resend after $value sec");
  }),

ReleansVerify().disposeTimer();

验证OTP

  1. 使用用户输入的代码和手机号调用verifyCode方法。
ReleansResult result = await ReleansVerify().verifyCode(
                      code: "0000", mobile:"+9715200000");

处理结果

  1. ReleansResult对象将在sendCode和verifyCode方法后返回。
  2. 通过使用result.message查看响应消息。
  3. 通过使用result.isSuccess()检查请求是否成功。
//打印消息
log("message ${result.message}");
//打印状态码
log("status ${result.status}");
//检查请求是否成功
log("isSuccess ${result.isSuccess()}");

完整示例

以下是一个完整的示例,展示了如何使用releans_verify插件进行身份验证。

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:releans_verify/releans.dart';

void main() {
  //初始化releans SMS,使用API密钥和发送者
  //如果不存在,请在仪表板中创建新的发送者
  ReleansVerify().init(
      apiKey: "xxxxxxxxxxxxxxxxxxxxxxxx",
      sender: "xxxxx",
      resendingDelayInSeconds: 30);
  runApp(const MyApp());
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var mobileNumberTextField = TextEditingController();
  var codeTextField = TextEditingController();

  String sendingMsg = "";
  String verifyMsg = "";

  bool isErrorSending = false;
  bool isErrorVerify = false;
  bool isVerified = false;

  [@override](/user/override)
  void initState() {
    mobileNumberTextField.text = "+971527827667";
    super.initState();
  }

  send() async {
    if (mobileNumberTextField.text.trim().isEmpty) return;
    //发送OTP,使用手机号
    //设置通道,默认为Channel.voice
    ReleansResult result = await ReleansVerify()
        .sendCode(mobile: mobileNumberTextField.text.trim());
    //打印消息
    log("message ${result.message}");
    //打印状态码
    log("status ${result.status}");
    //检查请求是否成功
    log("isSuccess ${result.isSuccess()}");
    setState(() {
      sendingMsg = result.message!;
      isErrorSending = !result.isSuccess();
    });
  }

  verify() async {
    if (mobileNumberTextField.text.trim().isEmpty ||
        codeTextField.text.trim().isEmpty) return;
    //验证代码,使用用户输入的代码和手机号
    ReleansResult result = await ReleansVerify().verifyCode(
        code: codeTextField.text.trim(),
        mobile: mobileNumberTextField.text.trim());
    //打印消息
    log("message ${result.message}");
    //打印状态码
    log("status ${result.status}");
    //检查请求是否成功
    log("isSuccess ${result.isSuccess()}");
    setState(() {
      verifyMsg = result.message!;
      isErrorVerify = !result.isSuccess();
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Releans Verify'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(10.0),
          child: Column(
            children: [
              const SizedBox(height: 20),
              Row(
                children: [
                  Expanded(
                      child: TextField(
                    controller: mobileNumberTextField,
                    decoration: const InputDecoration(
                      focusedBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: Colors.grey, width: 1.0),
                      ),
                      enabledBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: Colors.grey, width: 1.0),
                      ),
                      hintText: 'Mobile Number',
                    ),
                  )),
                  const SizedBox(width: 15),
                  ElevatedButton(
                    onPressed: send,
                    child: const Text("Send"),
                  ),
                ],
              ),
              const SizedBox(height: 20),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  ValueListenableBuilder<int>(
                      valueListenable: ReleansVerify().remainingSeconds,
                      builder: (context, value, _) {
                        return Text("remaining $value sec");
                      }),
                  const SizedBox(width: 20),
                  ElevatedButton(
                    onPressed: () {
                      ReleansVerify().disposeTimer();
                    },
                    child: const Text("Cancel Timer"),
                  ),
                ],
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text(
                  sendingMsg,
                  style: TextStyle(
                      color: isErrorSending ? Colors.red : Colors.green),
                ),
              ),
              const Divider(),
              Row(
                children: [
                  Expanded(
                      child: TextField(
                    controller: codeTextField,
                    decoration: const InputDecoration(
                      focusedBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: Colors.grey, width: 1.0),
                      ),
                      enabledBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: Colors.grey, width: 1.0),
                      ),
                      hintText: 'Code',
                    ),
                  )),
                  const SizedBox(width: 15),
                  ElevatedButton(
                    onPressed: verify,
                    child: const Text("Verify"),
                  ),
                ],
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text(
                  verifyMsg,
                  style: TextStyle(
                      color: isErrorVerify ? Colors.red : Colors.green),
                ),
              ),
              const SizedBox(height: 20),
              Row(
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text(isVerified ? "Verified" : "Unverified"),
                  Icon(isVerified
                      ? Icons.verified_user
                      : Icons.verified_user_outlined),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用 releans_verify 插件进行身份验证的代码案例。这个插件通常用于处理短信验证、邮箱验证等身份验证流程。

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

dependencies:
  flutter:
    sdk: flutter
  releans_verify: ^latest_version  # 请替换为实际的最新版本号

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

接下来,你可以按照以下步骤在你的 Flutter 应用中实现身份验证功能。

1. 初始化 ReleansVerify

在你的 Flutter 应用中,首先需要初始化 ReleansVerify。这通常在应用的入口文件(例如 main.dart)中进行。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 ReleansVerify
  await ReleansVerify.instance.init(
    apiKey: 'YOUR_API_KEY',  // 替换为你的Releans API Key
    environment: 'production', // 或 'sandbox' 根据你的需求
  );

  runApp(MyApp());
}

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

2. 发送验证请求

接下来,你可以在你的页面或组件中发送验证请求。例如,当用户点击一个按钮时,发送短信验证请求:

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final _formKey = GlobalKey<FormState>();
  String _phoneNumber = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('身份验证'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(labelText: '手机号码'),
                keyboardType: TextInputType.phone,
                validator: (value) {
                  if (value.isEmpty || !value.contains(RegExp(r'^\d{10,11}$'))) {
                    return '请输入有效的手机号码';
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _phoneNumber = value;
                  });
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  if (_formKey.currentState!.validate()) {
                    try {
                      // 发送短信验证请求
                      await ReleansVerify.instance.sendOtp(
                        phoneNumber: _phoneNumber,
                        countryCode: 'CN', // 根据你的需求设置国家代码
                      );

                      // 提示用户验证请求已发送
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text('验证请求已发送')),
                      );
                    } catch (e) {
                      // 处理错误
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text('发送验证请求失败: ${e.message}')),
                      );
                    }
                  }
                },
                child: Text('发送验证码'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

3. 验证 OTP

用户收到短信验证码后,你可以提供一个输入框让用户输入验证码并进行验证:

class VerifyOtpScreen extends StatefulWidget {
  @override
  _VerifyOtpScreenState createState() => _VerifyOtpScreenState();
}

class _VerifyOtpScreenState extends State<VerifyOtpScreen> {
  final _formKey = GlobalKey<FormState>();
  String _otp = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('验证 OTP'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(labelText: '验证码'),
                keyboardType: TextInputType.number,
                validator: (value) {
                  if (value.isEmpty || value.length != 6) {
                    return '请输入6位验证码';
                  }
                  return null;
                },
                onChanged: (value) {
                  setState(() {
                    _otp = value;
                  });
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  if (_formKey.currentState!.validate()) {
                    try {
                      // 验证 OTP
                      bool result = await ReleansVerify.instance.verifyOtp(
                        otp: _otp,
                        phoneNumber: _phoneNumber, // 从之前的屏幕传递或存储的电话号码
                      );

                      if (result) {
                        // OTP 验证成功
                        ScaffoldMessenger.of(context).showSnackBar(
                          SnackBar(content: Text('验证成功')),
                        );
                        // 跳转到下一个屏幕或执行其他操作
                      } else {
                        // OTP 验证失败
                        ScaffoldMessenger.of(context).showSnackBar(
                          SnackBar(content: Text('验证码错误')),
                        );
                      }
                    } catch (e) {
                      // 处理错误
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text('验证失败: ${e.message}')),
                      );
                    }
                  }
                },
                child: Text('验证'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

总结

以上代码展示了如何在 Flutter 应用中使用 releans_verify 插件进行身份验证,包括发送短信验证码和验证 OTP。请根据你的实际需求进行调整,例如错误处理、UI 样式等。

确保在实际部署前测试所有功能,并遵循最佳实践来保护用户数据和隐私。

回到顶部