Flutter认证授权插件y_auth的使用
Flutter认证授权插件y_auth的使用
Y Auth项目
一个用于处理身份验证的Flutter包。
如何创建此项目?
设置Flutter
export PATH="$PATH:./flutter/sdk/flutter/bin"
创建Flutter包
首先,运行以下Flutter命令:
flutter create --template=package y_auth
创建示例Android & iOS包
首先,在y_auth
包文件夹中运行以下Flutter命令:
flutter create example --platforms=android,ios
接下来,将模块与示例应用程序关联起来。在example/pubspec.yaml
中导入库:
dependencies:
y_auth:
path: ../
之后,在lib/y_auth.dart
中导出你想要共享的类:
export 'presentation/widget/passwordless_widget.dart';
现在,你可以在示例应用程序中使用passwordless_widget.dart
。
运行示例应用程序
使用flutter命令运行示例应用程序:
flutter run
发布
首先,创建一个经过验证的发布者配置文件。
之后,更新以下文件:README.md
、CHANGELOG.md
和 pubspec.yaml
如果你想向CHANGELOG.md
添加提交/更改,可以使用以下格式:
git log --pretty="- %s (%h) <%an>"
使用dart命令发布包以进行首次发布或更新到新版本:
dart pub publish
参考:Dart官方文档
示例代码
/* Copyright © 2024 Yesferal Cueva. All rights reserved. */
import 'package:example/example_auth_environment.dart';
import 'package:flutter/material.dart';
import 'package:y_auth/domain/model/session_model.dart';
import 'package:y_auth/domain/model/token_model.dart';
import 'package:y_auth/framework/logger/y_log.dart';
import 'package:y_auth/y_auth.dart';
void main() {
ExampleAuthEnvironment().init();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 此小部件是你的应用的根。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// 这是你的应用的主题。
//
// 尝试这样做:运行你的应用(通过输入"flutter run")。你会看到
// 应用有一个紫色工具栏。然后,不退出应用,
// 尝试将colorScheme中的seedColor改为Colors.green
// 并触发热重载(保存更改或在支持热重载的IDE中按"hot reload"按钮,或者在命令行中输入"r")。
//
// 注意,计数器并没有重置回零;应用的状态不会在重载时丢失。要重置状态,使用热重启。
//
// 这也适用于代码,而不仅仅是值:大多数代码更改都可以通过简单的热重载来测试。
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
// 此小部件是你的应用的主页。它是有状态的,意味着
// 它有一个包含影响其外观的字段的状态对象(定义在下面)。
//
// 这个类是状态的配置。它持有由父组件(在这个例子中是App小部件)提供的值(例如标题)
// 并被构建方法使用。小部件子类中的字段总是标记为"final"。
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
SessionModel? _sessionModel = null;
YAuthDi? yAuthDi;
[@override](/user/override)
void initState() {
yAuthDi = YAuthDi(ExampleAuthEnvironment());
_syncSession();
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
// 这个方法会在每次setState被调用时重新运行,例如上面的_incrementCounter方法。
//
// Flutter框架已经优化了重新运行构建方法的速度,因此你可以简单地重建任何需要更新的东西,
// 而不是单独改变小部件实例。
return Scaffold(
appBar: AppBar(
// 尝试这样做:将颜色更改为特定颜色(例如Colors.amber),并触发热重载
// 以查看AppBar的颜色变化,而其他颜色保持不变。
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
// 这里我们取自MyHomePage对象的值,该对象由App.build方法创建,
// 并将其用作appbar标题。
title: Text(widget.title),
),
body: Center(
// Center是一个布局小部件。它接受一个子元素,并将其放置在父元素的中间。
child: Column(
// Column也是一个布局小部件。它接受一个子元素列表,并垂直排列它们。
// 默认情况下,它水平大小适应其子元素,并尝试与其父元素一样高。
//
// Column有各种属性可以控制其自身大小和子元素的位置。这里我们使用mainAxisAlignment来
// 垂直居中子元素;主轴是垂直的,因为Columns是垂直的(交叉轴是水平的)。
//
// 尝试这样做:触发调试绘制(选择IDE中的"Toggle Debug Paint"操作,或在控制台中按"p"键),
// 以查看每个小部件的线框。
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Email: ${_sessionModel?.email ?? "-"}"),
Text("Display Name: ${_sessionModel?.displayName ?? "-"}"),
ElevatedButton(
onPressed: () {
_navigateToLoginScreen();
},
child: const Text('Passwordless Screen'),
),
ElevatedButton(
onPressed: () {
yAuthDi
?.getAccessTokenUseCase()
.execute(_getAccessTokenSuccess, _getAccessTokenError);
},
child: const Text('Get current or new Access token'),
),
ElevatedButton(
onPressed: () {
yAuthDi
?.getAccessTokenUseCase()
.execute(_getAccessTokenSuccess, _getAccessTokenError, forceNewToken: true);
},
child: const Text('Get always a new Access token'),
),
ElevatedButton(
onPressed: () {
YAuthDi(ExampleAuthEnvironment()).getSignOutUseCase().execute();
_syncSession();
},
child: const Text('Sign Out'),
),
],
),
),
);
}
_getAccessTokenSuccess(ApiResponseModel? apiResponseModel) {
if (apiResponseModel != null) {
YLog.d("Access Token: ${apiResponseModel.expressToken?.accessToken}");
YLog.d("Refresh Token: ${apiResponseModel.expressToken?.refreshToken}");
} else {
YLog.d("Token is null");
_navigateToLoginScreen();
}
}
_getAccessTokenError(String message) {
YLog.d("Error Message: ${message}");
_navigateToLoginScreen();
}
_navigateToLoginScreen() {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
YAuthDi(ExampleAuthEnvironment())
.getRequestAuthCodeScreen("#3F35A5", "Y-Auth-ExampleApp", "com.yesferal.auth.example")),
).then((_) {
_syncSession();
});
}
_syncSession() async {
SessionModel? sessionModel = await yAuthDi
?.getCurrentSessionUseCase()
.execute();
setState(() {
_sessionModel = sessionModel;
});
}
}
更多关于Flutter认证授权插件y_auth的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter认证授权插件y_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
y_auth
是一个用于 Flutter 应用的身份验证和授权的插件。它可以帮助开发者轻松地集成用户登录、注册、权限管理等功能。以下是如何使用 y_auth
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 y_auth
插件的依赖。
dependencies:
flutter:
sdk: flutter
y_auth: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 y_auth
在你的 Flutter 应用启动时,你需要初始化 y_auth
插件。通常,你可以在 main.dart
文件中进行初始化。
import 'package:flutter/material.dart';
import 'package:y_auth/y_auth.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 y_auth
await YAuth.initialize(
apiKey: 'YOUR_API_KEY',
authDomain: 'YOUR_AUTH_DOMAIN',
projectId: 'YOUR_PROJECT_ID',
);
runApp(MyApp());
}
3. 用户注册
你可以使用 y_auth
插件来注册新用户。
void registerUser() async {
try {
User user = await YAuth.instance.register(
email: 'user@example.com',
password: 'password123',
);
print('User registered: ${user.uid}');
} catch (e) {
print('Registration failed: $e');
}
}
4. 用户登录
用户登录可以通过以下方式实现:
void loginUser() async {
try {
User user = await YAuth.instance.login(
email: 'user@example.com',
password: 'password123',
);
print('User logged in: ${user.uid}');
} catch (e) {
print('Login failed: $e');
}
}
5. 获取当前用户
你可以通过 YAuth.instance.currentUser
来获取当前登录的用户。
void getCurrentUser() {
User? user = YAuth.instance.currentUser;
if (user != null) {
print('Current user: ${user.uid}');
} else {
print('No user is logged in');
}
}
6. 用户登出
用户登出可以通过以下方式实现:
void logoutUser() async {
await YAuth.instance.logout();
print('User logged out');
}
7. 权限管理
y_auth
还提供了权限管理的功能。你可以通过以下方式检查用户的权限:
void checkPermission() async {
bool hasPermission = await YAuth.instance.hasPermission('read:data');
if (hasPermission) {
print('User has permission');
} else {
print('User does not have permission');
}
}
8. 监听认证状态
你可以通过 YAuth.instance.authStateChanges()
来监听用户的认证状态变化。
void listenAuthState() {
YAuth.instance.authStateChanges().listen((User? user) {
if (user != null) {
print('User is logged in: ${user.uid}');
} else {
print('User is logged out');
}
});
}
9. 错误处理
在使用 y_auth
时,可能会遇到各种错误。你可以通过捕获异常来处理这些错误。
void handleErrors() async {
try {
User user = await YAuth.instance.login(
email: 'user@example.com',
password: 'wrongpassword',
);
} catch (e) {
print('Error: $e');
}
}