Flutter身份验证插件authing_sdk_odds的使用

Flutter身份验证插件authing_sdk_odds的使用

获取开始

添加依赖

在你的pubspec.yaml文件中,添加以下依赖:

dependencies:
  authing_sdk_odds: ^1.0.0

SDK初始化

在应用启动时,调用初始化方法:

import 'package:authing_sdk_odds/authing.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Authing.init('userPoolId', 'appId');
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Authing SDK Example')),
        body: Center(child: Text('Hello World')),
      ),
    );
  }
}

其中userPoolId是你的Authing用户池ID,appId是你的Authing应用程序ID。

本地部署

对于本地部署,在调用init方法后,还需要调用以下方法:

Authing.setOnPremiseInfo('host', 'publicKey');

其中host是你的自定义域名(例如mycompany.com),publicKey是组织的公钥。如果有任何问题,请联系Authing销售团队。

API

基础认证API

注册邮箱

通过邮箱注册新用户。邮箱不区分大小写,并且必须在一个给定的用户池内唯一。注册后,emailVerifiedfalse

import 'package:authing_sdk_odds/client.dart';

Future<void> registerByEmail() async {
  AuthResult result = await AuthClient.registerByEmail("x@example.com", "strong");
  User user = result.user;
  print(user);
}

注册用户名

通过用户名注册新用户。用户名区分大小写,并且必须在一个给定的用户池内唯一。

Future<void> registerByUserName() async {
  AuthResult result = await AuthClient.registerByUserName("nextgeneration", "strong");
  User user = result.user;
  print(user);
}

注册手机号

通过手机号和验证码注册新用户。手机号必须在一个给定的用户池内唯一。

Future<void> registerByPhoneCode() async {
  // 首先发送验证码
  AuthResult sendResult = await AuthClient.sendSms("13012345678", "+86");
  if (sendResult.code == 200) {
    // 调用注册方法
    AuthResult result = await AuthClient.registerByPhoneCode("13012345678", "1121", "strong");
    User user = result.user;
    print(user);
  }
}

使用账号和密码登录

Future<void> loginByAccount() async {
  AuthResult result = await AuthClient.loginByAccount("your account", "your password");
  User user = result.user; // 用户信息
  print(user);
}

使用手机号和验证码登录

Future<void> loginByPhoneCode() async {
  // 首先发送验证码
  AuthResult sendResult = await AuthClient.sendSms("13012345678", "+86");
  if (sendResult.code == 200) {
    // 调用登录方法
    AuthResult result = await AuthClient.loginByPhoneCode("13012345678", "1234");
    User user = result.user; // 获取用户信息
    print(user);
  }
}

通过LDAP登录

Future<void> loginByLDAP() async {
  AuthResult result = await AuthClient.loginByLDAP("your username", "your password");
  User user = result.user; // 用户信息
  print(user);
}

通过AD登录

Future<void> loginByAD() async {
  AuthResult result = await AuthClient.loginByAD("your username", "your password");
  User user = result.user; // 用户信息
  print(user);
}

获取当前用户

Future<void> getCurrentUser() async {
  AuthResult result = await AuthClient.getCurrentUser();
  User user = result.user; // 用户信息
  print(user);
}

登出

Future<void> logout() async {
  AuthResult result = await AuthClient.logout();
  var code = result.code;
  print(code);
}

发送短信验证码

Future<void> sendSMSCode() async {
  AuthResult result = await AuthClient.sendSms("13012345678", "+86");
  var code = result.code;
  print(code);
}

发送邮件

Future<void> sendEmail() async {
  AuthResult result = await AuthClient.sendEmail("cool@gmail.com", "RESET_PASSWORD");
  var code = result.code;
  print(code);
}

获取用户自定义数据

Future<void> getCustomData() async {
  AuthResult result = await AuthClient.getCustomData("user_id");
  var value = AuthClient.currentUser?.customData[0]["key"];
  print(value);
}

设置用户自定义数据

Future<void> setCustomData() async {
  AuthClient.currentUser?.customData[0]["value"] = "hello";
  AuthResult result = await AuthClient.setCustomData(AuthClient.currentUser!.customData);
  print(result.code);
}

通过手机号码重置密码

Future<void> resetPasswordByPhoneCode() async {
  AuthResult result = await AuthClient.resetPasswordByPhoneCode("13012345678", "1234", "strong");
  expect(result.code, 200);
  print(result.code);
}

通过邮箱重置密码

Future<void> resetPasswordByEmailCode() async {
  AuthResult result = await AuthClient.resetPasswordByEmailCode("cool@gmail.com", "1234", "strong");
  expect(result.code, 200);
  print(result.code);
}

更新用户资料

Future<void> updateUserProfile() async {
  AuthResult result = await AuthClient.updateProfile({
    "username":"elonmusk",
    "nickname":"Ironman"
  });
  print(result.code);
}

更新密码

Future<void> updateUserPassword() async {
  AuthResult result = await AuthClient.updatePassword("newPassword", "oldPassword");
  var code = result.code;
  print(code);
}

绑定手机号

Future<void> bindPhone() async {
  AuthResult result = await AuthClient.bindPhone("13012345678", "1234");
  var code = result.code;
  print(code);
}

解绑手机号

Future<void> unbindPhone() async {
  AuthResult result = await AuthClient.unbindPhone();
  print(result.code);
}

更新手机号

Future<void> updatePhone() async {
  AuthResult result = await AuthClient.updatePhone("13012345678", "1234");
  print(result.code);
}

绑定邮箱

Future<void> bindEmail() async {
  AuthResult result = await AuthClient.bindEmail("1@gmail.com", "1234");
  var code = result.code;
  print(code);
}

解绑邮箱

Future<void> unbindEmail() async {
  AuthResult result = await AuthClient.unbindEmail();
  print(result.code);
}

更新邮箱

Future<void> updateEmail() async {
  AuthResult result = await AuthClient.updateEmail("1@gmail.com", "1234");
  print(result.code);
}

关联账户

Future<void> linkAccounts() async {
  AuthResult result = await AuthClient.link("first_token", "second_token");
  print(result.code);
}

取消关联账户

Future<void> unlinkAccounts() async {
  AuthResult result = await AuthClient.unlink("wechat:mobile");
  print(result.code);
}

计算密码安全等级

int securityLevel = AuthClient.computePasswordSecurityLevel("123");
print(securityLevel); // 输出0

获取安全级别

Future<void> getSecurityLevel() async {
  Result result = await AuthClient.getSecurityLevel();
  int score = result.data["score"];
  print(score);
}

列出应用

Future<void> listApplications() async {
  Result result = await AuthClient.listApplications();
  int count = result.data["totalCount"];
  print(count);
}

列出组织

Future<void> listOrganizations() async {
  Result result = await AuthClient.listOrgs();
  List list = result.data["data"];
  print(list);
}

列出角色

Future<void> listRoles() async {
  Result result = await AuthClient.listRoles();
  List list = result.data["data"];
  print(list);
}

列出授权资源

Future<void> listAuthorizedResources() async {
  Map result = await AuthClient.listAuthorizedResources("default");
  String code = result["list"][0]["code"];
  print(code);
}

更新ID Token

Future<void> updateIdToken() async {
  Map result = await AuthClient.updateIdToken();
  print(result);
}

通过首次登录令牌重置密码

Future<void> resetPasswordByFirstLoginToken() async {
  AuthResult result = await AuthClient.resetPasswordByFirstLoginToken("token", "strong");
  print(result.code);
}

社交API

通过微信登录

Future<void> loginByWeChat() async {
  AuthResult result = await AuthClient.loginByWechat("connId", "code");
  print(result.code);
}

通过支付宝登录

Future<void> loginByAlipay() async {
  AuthResult result = await AuthClient.loginByAlipay("connId", "code");
  print(result.code);
}

通过苹果登录

Future<void> loginByApple() async {
  AuthResult result = await AuthClient.loginByApple("code");
  print(result.code);
}

MFA API

MFA检查

Future<void> mfaCheck() async {
  bool r1 = await AuthClient.mfaCheck("13012345678", null);
  bool r2 = await AuthClient.mfaCheck(null, "abc@gmail.com");
  print(r1);
  print(r2);
}

通过手机号MFA验证

Future<void> mfaVerifyByPhone() async {
  AuthResult result = await AuthClient.mfaVerifyByPhone("13012345678", "1234");
  print(result.code);
}

通过邮箱MFA验证

Future<void> mfaVerifyByEmail() async {
  AuthResult result = await AuthClient.mfaVerifyByEmail("1@gmail.com", "1234");
  print(result.code);
}

通过TOTP MFA验证

Future<void> mfaVerifyByTOTP() async {
  AuthResult result = await AuthClient.mfaVerifyByTOTP("1234");
  print(result.code);
}

通过恢复码MFA验证

Future<void> mfaVerifyByRecoveryCode() async {
  AuthResult result = await AuthClient.mfaVerifyByRecoveryCode("1234");
  print(result.code);
}

OIDC API

通过授权码登录

Future<void> authByCode() async {
  AuthResult result = await AuthClient.authByCode("P6FENDfGSH72PxgJQk17FoGMWY3oL1G0D2PQ1AfyDeo",
      "fu6IivbcEb7DFCytjLmoAICRtFLbG9zkk5QdDbNd0gG",
      "https://guard.authing/redirect");
  String ak = result.user?.accessToken;
  String idToken = result.user?.idToken;
  print(ak);
  print(idToken);
}

通过账号和密码登录

Future<void> oidcLoginByAccount() async {
  AuthResult result = await AuthClient.loginByAccount("your account", "your password");
  User user = result.user; // 用户信息
  print(user);
}

通过手机号码和验证码登录

Future<void> oidcLoginByPhoneCode() async {
  AuthResult result = await AuthClient.loginByPhoneCode("phone", "code");
  User user = result.user; // 获取用户信息
  print(user);
}

构建授权URL

Future<void> buildAuthorizeUrl() async {
  AuthRequest authRequest = AuthRequest();
  authRequest.createAuthRequest();
  // authRequest.scope = "scope";
  // authRequest.redirectUrl = "redirectUrl";
  String url = await AuthClient.buildAuthorizeUrl(authRequest);
  print(url);
}

通过Access Token获取用户信息

Future<void> getUserInfoByAccessToken() async {
  Result result = await AuthClient.getUserInfoByAccessToken("accessToken");
  print(result.data);
}

通过刷新Token获取新的Access Token

Future<void> getNewAccessTokenByRefreshToken() async {
  AuthResult result = await AuthClient.getNewAccessTokenByRefreshToken("refreshToken");
  User user = result.user; // 获取用户信息
  print(user);
}

扫描API

标记二维码已扫描

Future<void> markQRCodeScanned() async {
  Result result = await AuthClient.markQRCodeScanned("ticket");
  print(result.code);
}

通过扫描二维码登录

Future<void> loginByScannedTicket() async {
  Result result = await AuthClient.loginByScannedTicket("random");
  print(result.code);
}

更多关于Flutter身份验证插件authing_sdk_odds的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


authing_sdk_odds 是一个用于 Flutter 应用的身份验证插件,通常用于与 Authing 身份验证服务集成。Authing 是一款身份认证云服务,提供了用户注册、登录、权限管理等功能。

以下是使用 authing_sdk_odds 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  authing_sdk_odds: ^1.0.0  # 请根据实际版本号填写

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

2. 初始化 SDK

在使用 authing_sdk_odds 之前,你需要在应用启动时初始化 SDK。通常,你可以在 main.dart 文件中进行初始化。

import 'package:authing_sdk_odds/authing_sdk_odds.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Authing SDK
  await Authing.init(
    userPoolId: 'YOUR_USER_POOL_ID',  // 你的用户池 ID
    appId: 'YOUR_APP_ID',            // 你的应用 ID
    region: 'YOUR_REGION',           // 你的区域,例如 'cn'
  );
  
  runApp(MyApp());
}

3. 用户注册

你可以使用 Authing 提供的 register 方法来注册新用户。

void registerUser() async {
  try {
    final result = await Authing.register(
      email: 'user@example.com',
      password: 'password123',
    );
    print('注册成功: ${result.toJson()}');
  } catch (e) {
    print('注册失败: $e');
  }
}

4. 用户登录

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

void loginUser() async {
  try {
    final result = await Authing.login(
      email: 'user@example.com',
      password: 'password123',
    );
    print('登录成功: ${result.toJson()}');
  } catch (e) {
    print('登录失败: $e');
  }
}

5. 获取用户信息

登录成功后,你可以使用 getUserInfo 方法来获取当前用户的信息。

void getUserInfo() async {
  try {
    final userInfo = await Authing.getUserInfo();
    print('用户信息: ${userInfo.toJson()}');
  } catch (e) {
    print('获取用户信息失败: $e');
  }
}

6. 用户注销

使用 logout 方法注销当前用户。

void logoutUser() async {
  try {
    await Authing.logout();
    print('注销成功');
  } catch (e) {
    print('注销失败: $e');
  }
}

7. 处理身份验证状态

你可以使用 Authing 提供的 onAuthStateChanged 方法来监听用户的身份验证状态变化。

void listenAuthState() {
  Authing.onAuthStateChanged.listen((authState) {
    if (authState == AuthState.authenticated) {
      print('用户已登录');
    } else {
      print('用户未登录');
    }
  });
}

8. 处理错误

在使用 authing_sdk_odds 时,可能会遇到各种错误。你可以通过 try-catch 块来捕获并处理这些错误。

void someAuthFunction() async {
  try {
    // 调用 Authing 方法
  } catch (e) {
    print('发生错误: $e');
  }
}
回到顶部