Flutter认证授权插件casauth的使用
Flutter认证授权插件casauth的使用

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服务器响应的status
为error
或code
不是200
,SDK会抛出CASAuthError
,该错误有三个级别:warn
、error
和 fatal
。warn
级别的错误不需要处理;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的kDebugMode
或kProfileMode
下,将打印堆栈跟踪信息以帮助调试。
发送验证码
当用户注册或重置密码时,必须向目标邮箱/手机号发送验证码。
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:
- 从服务器获取邮箱和手机号信息(通过用户名/邮箱/手机号)。
- 使用账户和账户类型发送验证码。
- 验证验证码,获得布尔验证结果和cookie。
- 使用用户名、验证码、新密码和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
更多关于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('登录'),
);