Flutter安全认证插件uae_pass_flutter的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter安全认证插件uae_pass_flutter的使用

插件简介

uae_pass_flutter 是一个非官方的用于 Android 和 iOS 的 UAE Pass 插件。它可以帮助开发者集成 UAE Pass 认证服务到他们的应用中。

安装插件

  1. 将插件添加到 pubspec.yaml 文件中:
uae_pass_flutter: ^0.0.1

或通过 Git 添加:

uae_pass_flutter:
  git:
    url: https://github.com/Faisalkc4u/uae_pass.git
    ref: main
  1. 运行 flutter pub get 获取插件:
flutter pub get
  1. 导入插件:
import 'package:uae_pass/uae_pass.dart';
final _uaePassPlugin = UaePass();

初始化插件

  • 沙盒环境
await _uaePassPlugin.setUpSandbox();
  • 生产环境
await _uaePassPlugin.setUpEnvironment(
                  "< client Id here >",
                  "< client secret here >",
                  "< redirect url scheme here >",
                  isProduction: true, // set to false for sandbox
                  redirect_url: "< redirect url here >",
                  scope: "< scope here >",// by default urn:uae:digitalid:profile
                );

认证流程

  1. 调用 authenticate 方法进行认证:
final result = await _uaePassPlugin.signIn();
  1. 检查结果:
if (result != null) {
  if (result is UaePassError) {
    print("Error: ${result.message}");
  } else if (result is UaePassSuccess) {
    print("Success: ${result.accessToken}");
  }
}

iOS 设置

在 Info.plist 文件中添加以下内容:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>uaepass</string>
  <string>uaepassqa</string>
  <string>uaepassdev</string>
  <string>uaepassstg</string>
</array>
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>Your App URL Scheme here</string> // e.g. uaepassdemoappDS (use for Sandbox )
    <key>CFBundleURLSchemes</key>
    <array>
      <string>Your App URL Scheme here</string> // e.g. uaepassdemoappDS (same as above)
    </array>
  </dict>
</array>

Android 设置

  1. 更新 AndroidManifest.xml 文件中的 android:launchMode="singleTask"
<activity
    android:name=".MainActivity"
    android:exported="true"

    android:launchMode="singleTask"

    android:theme="@style/LaunchTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize">
    .....

</activity>
  1. AndroidManifest.xml 文件中设置意图过滤器:
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data android:host="success" android:scheme="&lt;Your App Scheme&gt;" />
    <data android:host="failure" android:scheme="&lt;Your App Scheme&gt;" />
</intent-filter>

注意:如果遇到 Kotlin 错误,请在 build.gradle 文件中添加以下内容:

buildscript {
    ext.kotlin_version = '1.7.10'
}

获取访问令牌

  1. 使用 sign in 方法获取访问令牌:
curl --location --request POST 'https://stg-id.uaepass.ae/idshub/token?grant_type=authorization_code&amp;redirect_uri=https://stg-selfcare.uaepass.ae&amp;code=bfe96299-83f4-3ee9-80e4-56c24f5265d3' \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: Basic c2FuZGJveF9zdGFnZTpzYW5kYm94X3N0YWdl'
  1. 访问用户数据:
curl --location 'https://stg-id.uaepass.ae/idshub/userinfo' \
--header 'Authorization: Bearer token_here'

示例代码

import 'package:flutter/material.dart';

import 'my_app.dart';

void main() {
  print("main called");
  runApp(const MyApp2());
}

class MyApp2 extends StatelessWidget {
  const MyAppp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
            onPressed: () {
              Navigator.push(context,
                  MaterialPageRoute(builder: (context) =&gt; const MyApp()));
            },
            child: const Text("go Now")),
      ),
    );
  }
}

更多关于Flutter安全认证插件uae_pass_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter安全认证插件uae_pass_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用uae_pass_flutter插件进行安全认证的示例代码。请注意,这只是一个基本的示例,实际使用中可能需要根据具体需求进行调整。

首先,确保你已经在pubspec.yaml文件中添加了uae_pass_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  uae_pass_flutter: ^最新版本号  # 替换为实际发布的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤进行配置和使用uae_pass_flutter插件。

1. 导入插件

在你需要使用安全认证功能的Dart文件中导入插件:

import 'package:uae_pass_flutter/uae_pass_flutter.dart';

2. 初始化插件

通常,你会在应用的初始化阶段(例如在MainActivity.ktAppDelegate.swift中,以及Flutter的initState方法中)进行插件的初始化。不过,对于uae_pass_flutter,具体的初始化步骤可能会依赖于插件的文档和API设计。以下是一个假设的初始化过程(具体步骤请参考插件的官方文档):

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 假设插件有一个初始化方法
    // UaePassFlutter.instance.initialize(); // 如果插件有初始化方法,请在这里调用
    
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('UAE Pass Flutter Example'),
        ),
        body: MyHomePage(),
      ),
    );
  }
}

3. 使用插件进行安全认证

以下是一个假设的使用插件进行安全认证的示例代码。请注意,具体的方法和参数可能会根据插件的实际API有所不同:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String authenticationResult = '';

  void _performAuthentication() async {
    try {
      // 假设插件有一个authenticate方法,并接受一些必要的参数
      Map<String, dynamic> result = await UaePassFlutter.instance.authenticate(
        userId: 'your_user_id', // 替换为实际的用户ID
        password: 'your_password', // 替换为实际的密码
        // 其他必要的参数...
      );

      // 处理认证结果
      setState(() {
        authenticationResult = 'Authentication successful: ${result['message']}';
      });
    } catch (error) {
      // 处理认证错误
      setState(() {
        authenticationResult = 'Authentication failed: $error';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(authenticationResult),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _performAuthentication,
            child: Text('Perform Authentication'),
          ),
        ],
      ),
    );
  }
}

注意事项

  1. 插件版本:确保你使用的是最新版本的uae_pass_flutter插件,以避免已知的bug和兼容性问题。
  2. 平台特定配置:某些插件可能需要在iOS和Android平台上进行额外的配置。请参考插件的官方文档进行必要的设置。
  3. 安全性:不要在代码中硬编码敏感信息(如用户ID和密码)。考虑使用安全存储或其他方法来管理这些信息。

由于uae_pass_flutter插件的具体API和用法可能随着版本更新而变化,请务必参考插件的官方文档和示例代码来获取最新的使用指南。

回到顶部