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
更多关于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!')),
);
}