Flutter身份认证与授权插件cidaas_flutter_sdk的使用
Flutter身份认证与授权插件cidaas_flutter_sdk的使用
概述
cidaas_flutter_sdk
是一个用于在Flutter应用中实现安全身份验证和授权的插件。它简化了与Cidaas服务集成的过程,支持OAuth 2.0和OpenID Connect协议。
开始之前
要求
确保你的Dart SDK版本满足以下要求:
SDK: ">=2.7.0 <3.0.0"
安装
在项目的 pubspec.yaml
文件中添加 cidaas-SDK-flutter
依赖:
dependencies:
cidaas-SDK-flutter: ^3.3.3
然后运行 flutter pub get
来安装依赖。
配置
首先,在项目根目录下创建一个名为 cidaas_config.json
的配置文件,并填充如下内容:
{
"baseUrl": "https://yourCidaasBaseUrl.de",
"clientId": "your_apps_clientId",
"clientSecret": "your_apps_clientSecret",
"scopes": "openid profile email offline_access",
"redirectUri": "https://your_apps_redirectUri.de"
}
别忘了在 pubspec.yaml
中添加 /assets/
文件夹作为资源:
flutter:
assets:
- assets/
默认情况下,SDK会在 /assets
目录下查找配置文件。如果你希望自定义路径,请调用 checkAndLoadConfig({configPath: "your/custom/path/to/your/cidaas_config.json"})
方法,并确保在首次登录事件触发前完成此操作。
使用指南
集成SDK
要将SDK集成到你的应用程序中,你需要实现 Cidaas
类。这个类封装了由身份验证Bloc使用的状态逻辑。
下面是一个简单的示例,展示了如何实现这些方法:
import 'package:flutter/material.dart';
import 'package:cidaas-SDK-flutter/cidaas-SDK-flutter.dart';
class MyCidaasImpl extends Cidaas {
@override
Widget getLoggedOutScreen({context}) {
return Center(
child: ElevatedButton(
child: Text('Login'),
onPressed: () {
CidaasLoginProvider.doLogin(context);
},
),
);
}
@override
Widget getLoggedInScreen({tokenEntity}) {
return MyCustomLoggedInScreen(tokenEntity: tokenEntity);
}
@override
Widget getSplashScreen() {
return Center(
child: Text('Please wait'),
);
}
@override
Widget getAuthenticationFailureScreen({errorMessage}) {
return Scaffold(
body: Center(
child: Text('$errorMessage', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.red)),
),
);
}
}
// 在主函数中初始化并使用
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider<AuthenticationBloc>(
create: (context) => AuthenticationBloc(),
child: MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('App')),
body: MyCidaasImpl(),
),
),
);
}
}
获取访问令牌
用户登录后,你可以通过以下方式获取访问令牌:
TokenEntity tokenEntity = await CidaasLoginProvider.getStoredAccessToken();
返回的 TokenEntity
包含 accessToken
, idToken
, sub
, 和 refreshToken
。
检查用户是否已登录
你可以通过以下代码手动检查用户是否已登录:
bool isLoggedIn = await CidaasLoginProvider.isAuth();
触发登录和登出
你可以随时从代码中触发登录或登出:
CidaasLoginProvider.doLogin(context); // 触发登录
CidaasLoginProvider.doLogout(context); // 触发登出
请注意,提供的上下文必须包含 AuthenticationBloc
。
以上是关于如何在Flutter应用中使用 cidaas_flutter_sdk
插件进行身份验证和授权的基本介绍和示例。更多详细信息请参考 Cidaas官方文档。
更多关于Flutter身份认证与授权插件cidaas_flutter_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份认证与授权插件cidaas_flutter_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成并使用cidaas_flutter_sdk进行身份认证与授权的示例代码。这包括基本的用户注册、登录和获取用户信息的流程。
1. 添加依赖
首先,在你的Flutter项目的pubspec.yaml
文件中添加cidaas_flutter_sdk
依赖:
dependencies:
flutter:
sdk: flutter
cidaas_flutter_sdk: ^最新版本号 # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置cidaas
在cidaas平台注册你的应用并获取所需的配置信息,如clientId
、clientSecret
、domain
等。
3. 初始化cidaas_flutter_sdk
在你的Flutter项目的入口文件(通常是main.dart
)中初始化cidaas_flutter_sdk:
import 'package:flutter/material.dart';
import 'package:cidaas_flutter_sdk/cidaas_flutter_sdk.dart';
void main() {
// 初始化cidaas SDK
CidaasFlutterSdk.init(
clientId: '你的ClientId',
clientSecret: '你的ClientSecret',
domain: '你的Domain',
// 其他可选配置
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
4. 用户注册
创建一个注册页面,允许用户输入注册信息并提交:
import 'package:flutter/material.dart';
import 'package:cidaas_flutter_sdk/cidaas_flutter_sdk.dart';
class RegisterScreen extends StatefulWidget {
@override
_RegisterScreenState createState() => _RegisterScreenState();
}
class _RegisterScreenState extends State<RegisterScreen> {
final _formKey = GlobalKey<FormState>();
String email = '';
String password = '';
void _submit() async {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
try {
var result = await CidaasFlutterSdk.register(
email: email,
password: password,
);
print('注册结果: ${result.toString()}');
// 处理注册结果,例如跳转到登录页面
} catch (e) {
print('注册失败: ${e.toString()}');
}
}
}
@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(
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入Email';
}
return null;
},
onSaved: (value) {
email = value!;
},
),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入密码';
}
return null;
},
obscureText: true,
onSaved: (value) {
password = value!;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _submit,
child: Text('注册'),
),
],
),
),
),
);
}
}
5. 用户登录
创建一个登录页面,允许用户输入登录信息并提交:
import 'package:flutter/material.dart';
import 'package:cidaas_flutter_sdk/cidaas_flutter_sdk.dart';
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
final _formKey = GlobalKey<FormState>();
String email = '';
String password = '';
void _submit() async {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
try {
var result = await CidaasFlutterSdk.login(
email: email,
password: password,
);
print('登录结果: ${result.toString()}');
// 处理登录结果,例如保存token或跳转到主页面
} catch (e) {
print('登录失败: ${e.toString()}');
}
}
}
@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(
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: 'Email'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入Email';
}
return null;
},
onSaved: (value) {
email = value!;
},
),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
validator: (value) {
if (value == null || value.isEmpty) {
return '请输入密码';
}
return null;
},
obscureText: true,
onSaved: (value) {
password = value!;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _submit,
child: Text('登录'),
),
],
),
),
),
);
}
}
6. 获取用户信息
一旦用户成功登录,你可以使用cidaas SDK提供的API来获取用户信息:
void _fetchUserInfo() async {
try {
var userInfo = await CidaasFlutterSdk.getUserInfo();
print('用户信息: ${userInfo.toString()}');
// 处理用户信息,例如显示在UI上
} catch (e) {
print('获取用户信息失败: ${e.toString()}');
}
}
7. 完整示例
将上述代码片段组合成一个完整的Flutter应用:
import 'package:flutter/material.dart';
import 'package:cidaas_flutter_sdk/cidaas_flutter_sdk.dart';
void main() {
CidaasFlutterSdk.init(
clientId: '你的ClientId',
clientSecret: '你的ClientSecret',
domain: '你的Domain',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('cidaas Flutter SDK 示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () => Navigator.push(
context,
MaterialPageRoute(builder: (context) => RegisterScreen()),
),
child: Text('注册'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginScreen()),
),
child: Text('登录'),
),
],
),
),
);
}
}
// RegisterScreen 和 LoginScreen 类代码如上所示
这个示例展示了如何使用cidaas_flutter_sdk进行用户注册、登录和获取用户信息的基本流程。你可以根据需要进一步扩展和自定义这些功能。