Flutter单点登录插件flutter_sso_sdk的使用

Flutter单点登录插件flutter_sso_sdk的使用

在Flutter项目中集成“Flutter SSO SDK”以支持Android和iOS平台,请按照以下步骤操作:

Step 1: 在pubspec.yaml文件中添加依赖并更新

pubspec.yaml文件中添加插件依赖,并点击“get pub”按钮来更新依赖。

# 添加 flutter_sso_sdk 插件依赖
dependencies:
  flutter_sso_sdk: ^1.0.1

Step 2: 创建“assets”文件夹并添加私钥

在项目根目录下创建一个名为“assets”的文件夹,并在其中创建一个子文件夹“privateKey”,将您的private_key文件放入该文件夹中。

pubspec.yaml文件中配置资源路径,以便加载private_key文件:

# 配置 assets 路径
assets:
  - assets/privateKey/private_key

保存后运行以下命令以确保资源被正确加载:

flutter pub get

Step 3: 编写启动Flutter SSO SDK的代码

在需要启动单点登录的地方编写以下代码:

import 'package:flutter/material.dart';
import 'dart:convert'; // 导入用于 JSON 编码的库

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LoginScreen(),
    );
  }
}

class LoginScreen extends StatefulWidget {
  [@override](/user/override)
  _LoginScreenState createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  void _startSingleSignOn(BuildContext context) async {
    // 初始化 BaseURL 和私钥路径
    EdugorillaSSO.initializeBaseUrl("https://your-portal-url.com", 'assets/privateKey/private_key');

    // 构建用户信息对象
    Map<String, dynamic> userInfo = {
      'name': "张三", // 用户姓名
      'email': "zhangsan@example.com", // 用户邮箱
      'mobile': "1234567890", // 用户手机号(不超过10位)
    };

    // 将用户信息转换为 JSON 字符串
    String userInfoJson = json.encode(userInfo);

    // 启动加密后的 WebView 并打开登录页面
    EdugorillaSSO.encryptUrlAndOpenWebView(context, userInfoJson.toString(), "/");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter SSO 示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _startSingleSignOn(context),
          child: Text('开始单点登录'),
        ),
      ),
    );
  }
}

注意事项

  1. BaseURL:请根据实际项目需求替换https://your-portal-url.com为真实的单点登录门户地址。
  2. 私钥路径:确保private_key文件已正确放置在assets/privateKey/目录下,并在pubspec.yaml中正确配置了资源路径。
  3. 手机号长度:手机号字段不能超过10位数字,请根据实际情况调整。

完整示例代码

以下是完整的代码示例:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LoginScreen(),
    );
  }
}

class LoginScreen extends StatefulWidget {
  [@override](/user/override)
  _LoginScreenState createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  void _startSingleSignOn(BuildContext context) async {
    // 初始化 BaseURL 和私钥路径
    EdugorillaSSO.initializeBaseUrl("https://your-portal-url.com", 'assets/privateKey/private_key');

    // 构建用户信息对象
    Map<String, dynamic> userInfo = {
      'name': "张三", // 用户姓名
      'email': "zhangsan@example.com", // 用户邮箱
      'mobile': "1234567890", // 用户手机号(不超过10位)
    };

    // 将用户信息转换为 JSON 字符串
    String userInfoJson = json.encode(userInfo);

    // 启动加密后的 WebView 并打开登录页面
    EdugorillaSSO.encryptUrlAndOpenWebView(context, userInfoJson.toString(), "/");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter SSO 示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _startSingleSignOn(context),
          child: Text('开始单点登录'),
        ),
      ),
    );
  }
}

更多关于Flutter单点登录插件flutter_sso_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter单点登录插件flutter_sso_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_sso_sdk 是一个用于实现单点登录(SSO)功能的 Flutter 插件。它可以帮助开发者在 Flutter 应用中集成单点登录功能,允许用户使用相同的凭据登录多个应用或服务。

以下是如何使用 flutter_sso_sdk 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_sso_sdk: ^1.0.0  # 请根据实际情况使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 SDK

在你的 Flutter 应用中,你需要在应用的入口处初始化 flutter_sso_sdk

import 'package:flutter_sso_sdk/flutter_sso_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 SSO SDK
  await FlutterSSOSdk.initialize(
    clientId: 'YOUR_CLIENT_ID',
    clientSecret: 'YOUR_CLIENT_SECRET',
    redirectUri: 'YOUR_REDIRECT_URI',
    authorizationEndpoint: 'YOUR_AUTHORIZATION_ENDPOINT',
    tokenEndpoint: 'YOUR_TOKEN_ENDPOINT',
    scopes: ['openid', 'profile', 'email'],
  );

  runApp(MyApp());
}

3. 登录

使用 FlutterSSOSdk 提供的 login 方法来进行用户登录。

Future<void> login() async {
  try {
    final tokenResponse = await FlutterSSOSdk.login();
    print('Access Token: ${tokenResponse.accessToken}');
    print('ID Token: ${tokenResponse.idToken}');
    print('Refresh Token: ${tokenResponse.refreshToken}');
  } catch (e) {
    print('Login failed: $e');
  }
}

4. 登出

使用 FlutterSSOSdk 提供的 logout 方法来登出用户。

Future<void> logout() async {
  try {
    await FlutterSSOSdk.logout();
    print('User logged out successfully');
  } catch (e) {
    print('Logout failed: $e');
  }
}

5. 获取用户信息

你可以使用 FlutterSSOSdk 提供的 getUserInfo 方法来获取用户的详细信息。

Future<void> getUserInfo() async {
  try {
    final userInfo = await FlutterSSOSdk.getUserInfo();
    print('User Info: $userInfo');
  } catch (e) {
    print('Failed to get user info: $e');
  }
}

6. 处理令牌刷新

如果访问令牌过期,你可以使用 FlutterSSOSdk 提供的 refreshToken 方法来刷新令牌。

Future<void> refreshToken() async {
  try {
    final tokenResponse = await FlutterSSOSdk.refreshToken();
    print('New Access Token: ${tokenResponse.accessToken}');
  } catch (e) {
    print('Failed to refresh token: $e');
  }
}

7. 处理回调

在 OAuth2 流程中,通常需要一个回调 URI 来处理授权码。确保你的应用能够处理这个回调,并在回调中调用 FlutterSSOSdk.handleCallback 方法。

void handleCallback(Uri uri) async {
  try {
    await FlutterSSOSdk.handleCallback(uri);
    print('Callback handled successfully');
  } catch (e) {
    print('Failed to handle callback: $e');
  }
}
回到顶部