Flutter身份验证插件nui_auth的使用

在本教程中,我们将详细介绍如何使用Flutter SDK中的nui_auth插件来实现用户身份验证功能。通过该插件,您可以轻松地将现成的身份验证功能集成到您的应用程序中。


初始化 NUIAuth

首先,我们需要创建一个NUIAuthBuilder实例来构建NUIAuth实例。以下是初始化的基本步骤:

创建 NUIAuthBuilder 实例

var builder = NUIAuthBuilder();

指定 API 基础 URL

NUIAuth需要与后端框架一起工作,因此必须指定基础URL。

builder.baseUrl("https://inglabcloud.hopto.org");

指定应用版本

为了日志记录的目的,还需要指定当前应用的版本号。

builder.appVersion("1.0.2");

添加访问令牌过期回调

当访问令牌过期时,可以添加一个回调以通知用户重新登录。

builder.tokenExpiredListner(() {
    // TODO: 在此处执行某些操作,例如重定向用户到登录页面
});

构建 NUIAuth 实例

完成所有配置后,调用build()方法即可生成NUIAuth实例。

NUIAuth auth = builder.build();

完整示例:构建 NUIAuth 实例

以下是一个完整的示例代码,展示了如何构建一个NUIAuth实例:

final auth = NUIAuthBuilder()
    .appVersion("1.0.1") // 设置应用版本号
    .baseUrl("https://inglabhopto.org") // 设置API基础URL
    .tokenExpiredListener(() {
        // 当令牌过期时触发此回调,例如跳转到登录页面
        print("Token expired, redirect to login screen");
    })
    .build();

可用方法概览

NUIAuth 提供了许多实用的方法来处理用户身份验证和相关操作。以下是一些常用方法及其说明:

方法名称 描述
<code>get()</code> 获取已构建的NUIAuth实例
<code>signup()</code> 使用用户名、密码和电子邮件注册新用户
<code>login()</code> 使用用户名和密码登录用户
<code>verifyEmail()</code> 使用发送到邮箱的验证码验证注册邮箱
<code>resendEmailVerificationCode()</code> 重新发送邮箱验证码
<code>changePassword()</code> 更改当前用户的密码
<code>forgotPassword()</code> 发送重置密码的邮件
<code>renewAccessToken()</code> 如果刷新令牌未过期,则续期访问令牌
<code>logout()</code> 注销当前登录用户
<code>isLoggedIn()</code> 检查是否有用户已登录
<code>getUserId()</code> 获取当前登录用户的ID
<code>logUserActivity()</code> 记录当前登录用户的行为日志
<code>updateUserInfo()</code> 更新或保存与用户相关的数据库信息

获取 NUIAuth 实例

用户可以通过之前构建的NUIAuthBuilder获取NUIAuth实例。

final auth = NUIAuth.get();

示例代码:注册新用户

final signUpResult = await NUIAuth.get().signup(
    username: "testing@hotmail.com",
    password: "Testing123",
    email: "testing@hotmail.com"
);

示例代码:登录用户

final result = await NUIAuth.get().login(
    username: "testing@hotmail.com",
    password: "Testing123"
);

示例代码:验证邮箱

final result = await NUIAuth.get().verifyEmail(code: "123321");

示例代码:重发邮箱验证码

final result = await NUIAuth.get().resendEmailVerificationCode();

示例代码:更改密码

final result = await NUIAuth.get().changePassword(
    oldPassword: "Testing123",
    newPassword: "Testing@123",
    confirmPassword: "Testing@123"
);

示例代码:忘记密码

final result = await NUIAuth.get().forgotPassword(email: "testing@hotmail.com");

示例代码:续期访问令牌

final result = await NUIAuth.get().renewAccessToken();

示例代码:注销用户

final result = await NUIAuth.get().logout();

示例代码:检查是否已登录

final result = await NUIAuth.get().isLoggedIn();

示例代码:获取用户ID

final result = await NUIAuth.get().getUserId();

示例代码:记录用户活动

final userAct = NUIUserActivity(
    module: "My Profile",
    action: "Launch",
    time: DateTime.now()
);

final result = await NUIAuth.get().logUserActivity(userActivity: userAct);

示例代码:更新用户信息

final userInfo = NUIUserInfo(
    gender: "M",
    dateOfBirth: "03/03/1997",
    others: {
        "city": "Bangsar",
        "state": "WP Kuala Lumpur",
        "country": "Malaysia"
    }
);

final result = await NUIAuth.get().updateUserInfo(userInfo: userInfo);

示例代码:自动刷新令牌拦截器

以下是一个示例,展示如何通过拦截器自动刷新令牌:

NUIAuthWebInterceptor(onTokenExpired: () async {
    logNUI("DataFactory", "Token has expired and failed to refresh, go back to login screen");
    NUIBusEvent.get().send(NUIBusEventData<String>(
        data: "Session expired",
        sender: "Web interceptor",
        code: "401"
    ));
});

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

1 回复

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


nui_auth 是一个用于 Flutter 应用的身份验证插件,它提供了简单易用的 API 来处理用户身份验证流程,包括注册、登录、密码重置等功能。虽然 nui_auth 并不是一个非常知名的插件,但它的设计理念是简化身份验证的实现,使开发者能够快速集成身份验证功能。

以下是如何在 Flutter 应用中使用 nui_auth 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  nui_auth: ^0.1.0  # 请使用最新版本

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

2. 初始化 nui_auth

main.dart 文件中初始化 nui_auth 插件。通常,你需要在应用启动时进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 nui_auth
  await NuiAuth.initialize(
    apiKey: 'YOUR_API_KEY',  // 替换为你的 API 密钥
    baseUrl: 'https://your-auth-server.com',  // 替换为你的身份验证服务器地址
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Auth Demo',
      home: AuthScreen(),
    );
  }
}

3. 实现注册和登录功能

接下来,你可以使用 nui_auth 提供的 API 来实现用户注册和登录功能。以下是一个简单的示例:

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

class AuthScreen extends StatefulWidget {
  @override
  _AuthScreenState createState() => _AuthScreenState();
}

class _AuthScreenState extends State<AuthScreen> {
  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();

  Future<void> _register() async {
    try {
      await NuiAuth.register(
        email: _emailController.text,
        password: _passwordController.text,
      );
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Registration successful!')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Registration failed: $e')),
      );
    }
  }

  Future<void> _login() async {
    try {
      await NuiAuth.login(
        email: _emailController.text,
        password: _passwordController.text,
      );
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Login successful!')),
      );
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Login failed: $e')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Auth Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _emailController,
              decoration: InputDecoration(labelText: 'Email'),
            ),
            TextField(
              controller: _passwordController,
              decoration: InputDecoration(labelText: 'Password'),
              obscureText: true,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _register,
              child: Text('Register'),
            ),
            ElevatedButton(
              onPressed: _login,
              child: Text('Login'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 处理用户状态

你还可以使用 nui_auth 提供的 NuiAuth.currentUser 来获取当前用户的身份验证状态,并根据状态显示不同的 UI:

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: StreamBuilder<User?>(
          stream: NuiAuth.currentUser,
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return CircularProgressIndicator();
            } else if (snapshot.hasData) {
              return Text('Welcome, ${snapshot.data!.email}');
            } else {
              return Text('You are not logged in.');
            }
          },
        ),
      ),
    );
  }
}

5. 注销功能

你可以使用 NuiAuth.logout() 来实现用户注销功能:

Future<void> _logout() async {
  await NuiAuth.logout();
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('Logged out successfully!')),
  );
}
回到顶部