Flutter高级平台认证插件senior_platform_authentication的使用
Flutter高级平台认证插件senior_platform_authentication的使用
本项目旨在成为连接用于与Senior-X进行身份验证的端点和Dart语言的桥梁,而无需直接依赖于Flutter SDK。因此,它不仅可用于Flutter应用程序,还可以与其他使用Dart的语言的应用程序一起使用。
我们还提供了senior_platform_authentication_ui
包,该包已经集成了此项目,并提供了可供Flutter应用程序使用的现成界面和与Senior-X相关的业务规则。
建议仅在开发项目需要对Flutter前端界面进行自定义,而senior_platform_authentication_ui
库不支持的情况下,直接使用此包。
架构
架构基于清洁架构(Clean Architecture),但在项目范围分析后进行了某些适应性调整。该项目仅提供数据层和领域层,以便独立使用。
如何使用
加载senior_platform_authentication
包:
import 'package:senior_platform_authentication/senior_platform_authentication.dart';
配置基础URL(可选)
远程数据源被配置为使用包含请求基础URL的单例。默认情况下,使用的是Senior X生产环境的基础URL。
SeniorAuthentication.initialize(
encryptionKey: '您的32个字符的加密密钥',
);
也可以初始化选择请求将被定向到的环境:
SeniorAuthentication.initialize(
platformEnvironment: PlatformEnvironment.homolog,
encryptionKey: '您的32个字符的加密密钥',
);
此外,initialize
方法还有其他可用的配置选项,详情如下:
参数名 | 默认值 | 描述 |
---|---|---|
platformEnvironment | PlatformEnvironment.production | 请求将被定向到的环境。 |
enableLoginOffline | false | 启用或禁用离线登录。仅在与senior-platform-authentication-ui 包一起使用时有效。 |
automaticLogon | true | 定义是否应自动登录。仅在与senior-platform-authentication-ui 包一起使用且enableLoginOffline 已启用时有效。 |
includePhoto | false | 启用或禁用在调用getUser时包含用户照片。 |
baseUrl | ‘’ | 当platformEnvironment 具有值PlatformEnvironment.custom 时使用。定义自定义的基础URL。 |
baseAnonymousUrl | ‘’ | 当platformEnvironment 具有值PlatformEnvironment.custom 时使用。定义自定义的匿名基础URL。 |
frontendUrl | ‘’ | 当platformEnvironment 具有值PlatformEnvironment.custom 时使用。定义自定义的前端URL。 |
enableLoginWithKey | false | 启用或禁用应用密钥登录。仅在与senior-platform-authentication-ui 包一起使用时有效。 |
encryptionKey | N/A | 包含32个字符的加密密钥,将在存储和读取敏感数据时使用。 |
注意: encryptionKey
参数始终应该是相同的,否则将无法解密数据。
调用一个用例
用例可以按照以下方式调用:
final credentials = UserLogin(
username: '{YOUR_USERNAME}',
password: '{YOUR_PASSWORD}',
scope: 'mobile',
);
final loginUsecase = LoginUsecase();
await loginUsecase(credentials);
或者,我们可以直接调用call方法:
await loginUsecase.call(credentials);
注意事项
建议仅使用已经实现的用例及其与Senior X相关的业务规则。如果需要任何自定义,请联系Senior Sistemas的集成联系人。
示例代码
example/main.dart
import 'package:senior_platform_authentication/senior_platform_authentication.dart';
void main() async {
final getConnectionStatus = GetConnectivityStatusUsecase();
final connStatus = await getConnectionStatus(NoParams());
print('是否连接: $connStatus.');
final credentials = UserLogin(
username: '{YOUR_USERNAME}',
password: '{YOUR_PASSWORD}',
scope: 'mobile',
);
final tenantLogin = TenantLogin(
userName: '{YOUR_USERNAME}',
tenantDomain: '{YOUR_TENANT}',
);
SeniorAuthentication.initialize(
platformEnvironment: PlatformEnvironment.production,
encryptionKey: SeniorAuthentication.encryptionKey,
);
final getRecaptchaUrlUsecase = GetRecaptchaUrlUsecase();
final loginUsecase = LoginUsecase();
final getUserUsecase = GetUserUsecase();
final logoutOnlineUsecase = LogoutUsecase();
final getTenantLoginSettingsUsecase = GetTenantLoginSettingsUsecase();
final refreshTokenUsecase = RefreshTokenUsecase();
final getTenantSettingsUsecase = GetTenantSettingsUsecase();
try {
final url = await getRecaptchaUrlUsecase(NoParams());
print('RECAPTCHA URL >>> $url');
final authenticationResponse = await loginUsecase(credentials);
print('AUTHENTICATION RESPONSE >>> ${authenticationResponse.toString()}');
final tenantSettings = await getTenantSettingsUsecase(
authenticationResponse.token?.accessToken ?? '');
print('TENANT SETTINGS >>> ${tenantSettings.toString()}');
final getUserInput = GetUserInput(
accessToken: authenticationResponse.token?.accessToken ?? '',
username: authenticationResponse.token?.username ?? '',
includePhoto: false,
);
final user = await getUserUsecase(getUserInput);
print('USER >>> ${user.toString()}');
final refreshToken = RefreshToken(
token: authenticationResponse.token?.refreshToken ?? '',
scope: authenticationResponse.token?.accessToken ?? '',
tenant: user.tenantName);
final refreshAuthenticationResponse =
await refreshTokenUsecase(refreshToken);
print('REFRESH AUTHENTICATION RESPONSE >>> $refreshAuthenticationResponse');
// Call method is optional when calling usecase to be executed.
final logout = await logoutOnlineUsecase
.call(refreshAuthenticationResponse.token?.accessToken ?? '');
print('LOGOUT >>> $logout');
final tenantLoginSettings =
await getTenantLoginSettingsUsecase.call(tenantLogin);
print('TENANT LOGIN SETTINGS >>> $tenantLoginSettings');
} on ServerException catch (e) {
print('服务器异常 >>> ${e.toString()}');
} on UnauthorizedException catch (e) {
print('未授权异常 >>> ${e.toString()}');
} on BadRequestException catch (e) {
print('错误请求异常 >>> ${e.toString()}');
} on TenantNotFoundException catch (e) {
print('租户未找到异常 >>> ${e.toString()}');
} on UnknownException catch (e) {
print('未知异常 >>> ${e.toString()}');
}
}
更多关于Flutter高级平台认证插件senior_platform_authentication的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter高级平台认证插件senior_platform_authentication的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter的senior_platform_authentication
插件进行高级平台认证的代码示例。这个插件假设是一个虚构的插件,用于展示如何在Flutter应用中集成平台特定的认证机制。请注意,实际插件的API可能会有所不同,因此以下代码仅为示例用途。
首先,确保你已经在pubspec.yaml
文件中添加了该插件依赖:
dependencies:
flutter:
sdk: flutter
senior_platform_authentication: ^x.y.z # 替换为实际版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下方式使用senior_platform_authentication
插件:
import 'package:flutter/material.dart';
import 'package:senior_platform_authentication/senior_platform_authentication.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Senior Platform Authentication Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AuthScreen(),
);
}
}
class AuthScreen extends StatefulWidget {
@override
_AuthScreenState createState() => _AuthScreenState();
}
class _AuthScreenState extends State<AuthScreen> {
final SeniorPlatformAuthentication _auth = SeniorPlatformAuthentication();
String _authResult = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Senior Platform Authentication'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Authentication Result:',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 16),
Text(
_authResult,
style: TextStyle(fontSize: 16),
),
SizedBox(height: 32),
ElevatedButton(
onPressed: _performPlatformAuthentication,
child: Text('Authenticate'),
),
],
),
),
);
}
Future<void> _performPlatformAuthentication() async {
try {
// 调用插件的认证方法
String result = await _auth.authenticate();
// 更新UI以显示认证结果
setState(() {
_authResult = result;
});
} catch (e) {
// 处理认证失败的情况
setState(() {
_authResult = 'Authentication failed: ${e.message}';
});
}
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮,用于触发平台特定的认证流程。SeniorPlatformAuthentication
类(假设这是插件提供的类)有一个authenticate
方法,该方法返回一个Future,表示认证结果。
请注意以下几点:
- 插件的API:实际的插件API可能与上述示例中的不同。你需要查阅插件的官方文档来了解其具体的API和用法。
- 错误处理:在实际应用中,你应该添加更详细的错误处理逻辑,以处理各种可能的异常情况。
- UI更新:使用
setState
方法来更新UI,以反映认证结果。
由于senior_platform_authentication
是一个虚构的插件,因此上述代码仅为示例。在实际应用中,你需要根据所使用插件的实际API进行调整。