Flutter认证授权插件casauth的使用

Flutter认证授权插件casauth的使用

CASAuth Logo

CASAuth V2。这是一个用于casdoor的第三方Flutter客户端SDK。支持以下平台:

平台 测试状态 示例
iOS -
macOS 下载
Linux [-] -
Windows [-] -

开始前的准备

在开始使用此SDK之前,你需要先安装自己的casdoor。我只测试了这个SDK的一个小版本。

版本 Casdoor 最低版本 Casdoor 最高版本
v2.0.0 ✅ v1.308.0 ✅ v1.344.0
v2.1.0 ✅ v1.308.0 ✅ v1.344.0
v2.2.0 ✅ v1.308.0 ✅ v1.344.0
v2.3.0 ✅ v1.308.0 ✅ v1.344.0

快速开始

我将展示如何使用这个SDK。

如果casdoor服务器响应的statuserrorcode不是200,SDK会抛出CASAuthError,该错误有三个级别:warnerrorfatalwarn 级别的错误不需要处理;error 级别的错误只会导致当前方法/请求失败;当存在 fatal 级别的错误时,你调用的所有方法可能会失败。

在开始调用方法之前,你必须初始化SDK。

初始化

// 初始化全局实例
import 'package:casauth/casauth.dart';

String appId = "some-app-id";
String appName = "app-example";
String orgnazationName = "casbin";
String server = "https://door.casdoor.com";

try {
  // 通常我们使用默认的全局实例来访问casdoor。
  await init(appName, appId, server, orgnazationName);
  // 否则,你可以创建实例并自行管理。
  // var sdk = CASAuth(appName, appId, server, orgnazationName)
  // await sdk.init();
} catch (e) {
  debugPrint("初始化CASAuth SDK失败: $e");
}

CASAuth 和全局 init 方法有一些可选参数:

  • vault: Stash 包的 Vault,CASAuth 使用它来缓存令牌、用户信息等。如果没有设置 vault 参数,我们将默认初始化一个sqlite数据库。你可以初始化任何 stash 存储实现,并创建 vault 来为SDK自定义存储。
  • userPrefix: 随机用户名前缀,默认值为 mobile_
  • redirectUri: 在Casdoor应用配置中配置的地址,该值必须在应用的回调列表中。我们使用它来撤销/过期JWT令牌。默认值为 casauth
  • logLevel: 设置SDK日志打印级别。如果应用程序运行在flutter的 kDebugModekProfileMode 下,将打印堆栈跟踪信息以帮助调试。

发送验证码

当用户注册或重置密码时,必须向目标邮箱/手机号发送验证码。

try {
  AuthResult resp = await casauth.sendCode(email, type: AccountType.email);
} catch (e) {
  debugPrint("发送验证码失败");
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

注册/登录(通过手机号)

registerByPhone 方法默认支持中国手机号码(通过参数 countryCode=CN)。

try {
  AuthResult resp = await casauth.registerByPhone(phone, code, username: id, password: id);
  print("期望结果: ${resp.code == 200}, 实际结果: ${resp.status == "ok"}");
} on CASAuthError catch (err) {
  debugPrint("注册用户失败");
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

注册/登录(通过邮箱)

try {
  AuthResult resp = await casauth.registerByEmail(email, code, username: id, password: id);
  print("期望结果: ${resp.code == 200}, 实际结果: ${resp.status == "ok"}");
} on CASAuthError catch (err) {
  debugPrint("注册用户失败");
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

登录(通过账号)

你可以使用账户登录,包括用户名、邮箱或手机号。

var email = "me@example.com";
var username = "me_example_com";
var password = "your_strong_password";
try {
  // 通过邮箱登录
  AuthResult resp = await casauth.loginByAccount(email, password);
  // 通过用户名登录
  // resp = await casauth.loginByAccount(username, password);
  print("期望结果: ${resp.code == 200}, 实际结果: ${resp.status == "ok"}");
} on CASAuthError catch (err) {
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

登出

我们调用 /api/logout 来撤销JWT令牌。在Casdoor中你始终能看到这个令牌,它会在0秒后过期。

try {
  AuthResult resp = await casauth.logout();
  print("期望结果: ${resp.code == 200}, 实际结果: ${resp.status == "ok"}");
} on CASAuthError catch (err) {
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

自删除账户

通过用户自己进行软删除账户,这需要组织允许用户编辑 Is deleted 配置。该方法不会清理本地令牌,你可以在登出前使用已授权的令牌取消它。

try {
  AuthResult resp = casauth.softDeleteAccount();
  print("期望结果: ${resp.code == 200}, 实际结果: ${resp.status == "ok"}");
} on CASAuthError catch (err) {
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

取消自删除账户

通过用户自己取消软删除账户,这需要组织允许用户编辑 Is deleted 配置。

try {
  AuthResult resp = casauth.cancelDeleteAccount();
  print("期望结果: ${resp.code == 200}, 实际结果: ${resp.status == "ok"}");
} on CASAuthError catch (err) {
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

密码找回

为了找回用户的密码,我们必须按以下步骤调用API:

  1. 从服务器获取邮箱和手机号信息(通过用户名/邮箱/手机号)。
  2. 使用账户和账户类型发送验证码。
  3. 验证验证码,获得布尔验证结果和cookie。
  4. 使用用户名、验证码、新密码和cookie重置密码。

🔥🔥🔥 重要提示:setPassword 中的 name 必须是casdoor的用户名,而不是邮箱或手机号。

try {
  // 1. 获取邮箱和手机号信息
  var info = await casauth.getEmailAndPhone(email);

  // 2. 发送验证码
  await casauth.sendCode(email,
      type: AccountType.email, method: "forget");

  // 4. 重置密码
  await casauth.setPassword(info.name, code, password, cookie);

  // 3. 验证验证码
  var (verified, cookie) = await casauth.verifyCode(email, code);

  // 4. 重置密码
  await casauth.setPassword(info.name, code, password, cookie);
} on CASAuthError catch (err) {
  print("错误级别: ${err.level}, 消息: ${err.message}");
}

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

1 回复

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


casauth 是一个用于在 Flutter 应用中实现认证和授权的插件。它通常用于与 CAS(Central Authentication Service)服务器集成,以便在应用中实现单点登录(SSO)功能。CAS 是一种企业级的单点登录协议,广泛用于大学和企业环境中。

以下是如何在 Flutter 项目中使用 casauth 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  casauth: ^1.0.0  # 请检查最新版本

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

2. 导入插件

在你的 Dart 文件中导入 casauth 插件:

import 'package:casauth/casauth.dart';

3. 初始化 CAS 认证

在应用启动时,初始化 CAS 认证。你通常会在 main() 函数或应用的初始化代码中进行此操作。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 CAS 认证
  await Casauth.initialize(
    casServerUrl: 'https://your-cas-server-url',
    serviceUrl: 'https://your-service-url',
  );

  runApp(MyApp());
}

4. 进行认证

在应用中的某个地方(例如登录页面),你可以调用 Casauth.authenticate() 方法来进行认证:

void _authenticate() async {
  try {
    final user = await Casauth.authenticate();
    print('认证成功: ${user.username}');
  } catch (e) {
    print('认证失败: $e');
  }
}

5. 获取用户信息

认证成功后,你可以通过 Casauth 获取用户的详细信息:

void _getUserInfo() async {
  try {
    final user = await Casauth.getUser();
    print('用户信息: ${user.username}, ${user.email}');
  } catch (e) {
    print('获取用户信息失败: $e');
  }
}

6. 注销

你还可以通过 Casauth.logout() 方法来注销用户:

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

7. 处理认证状态

你可以使用 Casauth 的状态管理功能来处理用户的认证状态。例如,你可以监听用户的登录和注销事件:

Casauth.onAuthStateChanged.listen((user) {
  if (user != null) {
    print('用户已登录: ${user.username}');
  } else {
    print('用户已注销');
  }
});

8. 集成到 UI

最后,将认证逻辑集成到你的 UI 中。例如,在登录按钮的 onPressed 回调中调用 _authenticate() 方法:

ElevatedButton(
  onPressed: _authenticate,
  child: Text('登录'),
);
回到顶部