概述
CloudBase C# SDK 让您可以在 .NET 应用(包括 Unity、.NET Core、控制台及服务端应用)中使用云开发的能力,包括身份认证、文档型数据库、数据模型、MySQL 数据库、云函数、云托管、APIs、云存储等功能。
SDK 已在 GitHub 开源,欢迎查看源码、示例并反馈问题:TencentCloudBase/cloudbase-csharp-sdk。
CloudBase C# SDK 已与 HTTP API 全面对齐。所有异步方法均以 Async 结尾并返回 Task<T>。
SDK 按照功能用途分为以下类别:
- 安装:NuGet、Unity(UPM)及源码引用等安装方式。
- 示例项目:仓库
examples目录下的快速上手、终端测试工具与 Unity 游戏示例。 - 依赖注入:在 ASP.NET Core 等场景通过
AddCloudBase注册 SDK。 - 认证登录:用户注册和登录相关的 API 方法,支持多种登录方式。
- 会话管理:管理用户会话状态和令牌的 API 方法。
- 用户管理:获取、更新和管理用户信息的 API 方法。
- 身份源管理:管理第三方身份源绑定和解绑的 API 方法。
- 密码管理:密码重置和修改相关的 API 方法。
- 验证管理:验证码发送、验证和重发、图形验证码创建、验证和管理相关的 API 方法。
- 文档型数据库:文档型(NoSQL)数据库的集合、文档、查询、聚合、事务等链式操作。
- 数据模型:数据模型 CRUD 操作。
- 数据源查询:查询数据源聚合列表、详情、Schema 和表名。
- MySQL 数据库:MySQL RESTful 数据库操作。
- 云函数:调用云函数和函数型云托管。
- 云托管:调用云托管容器服务。
- APIs:调用 APIs 接口。
- 云存储:文件上传、下载、删除、复制、移动等操作。
- 更新日志:各版本变更记录。
安装
- .NET 项目(NuGet)
- Unity 项目(UPM)
- 从源码引用
推荐通过 NuGet 安装:
dotnet add package Tencent.CloudBase
或在 .csproj 中添加引用:
<ItemGroup>
<PackageReference Include="Tencent.CloudBase" Version="1.0.0" />
</ItemGroup>
自动选用 net10.0 目标(含 DI 集成)。
推荐通过 UPM Git URL 一步安装。在 Unity 中打开 Window → Package Manager → +(左上角)→ Add package from git URL...,粘贴:
https://github.com/TencentCloudBase/cloudbase-csharp-sdk.git?path=unity/com.tencent.cloudbase#v1.0.0
无需任何外部工具,自带 Unity 适配层,全平台(含 WebGL)即装即用。
适用于本地开发 / 贡献场景:
# 构建 SDK
dotnet build src/CloudBase/CloudBase.csproj
# 或构建整个解决方案(含示例)
dotnet build CloudBase.sln
在项目中添加项目引用:
<ItemGroup>
<ProjectReference Include="path/to/src/CloudBase/CloudBase.csproj" />
</ItemGroup>
示例项目
仓库的 examples 目录提供了三个可直接运行的完整示例,覆盖从控制台到 Unity 的不同使用场景:
| 示例 | 类型 | 说明 |
|---|---|---|
| QuickStart | .NET 控制台 | 最小化快速上手示例,演示初始化、匿名登录、获取用户等核心流程。 |
| TerminalUI | .NET 交互式终端 | 基于 Spectre.Console 的交互式测试工具,菜单式逐项体验认证、云函数、数据模型、MySQL、云存储、文档数据库等能力。 |
| UnityGame | Unity 工程 | 可用 Unity Hub 打开、按 Play 即可运行的完整小游戏工程,演示在 Unity 中集成登录、数据模型、文档数据库、云存储、云函数并渲染到 UI。 |
- QuickStart(快速上手)
- TerminalUI(终端测试工具)
- UnityGame(Unity 游戏)
最小化控制台示例,演示初始化、匿名登录与获取用户信息。
# 设置环境变量后运行
export CLOUDBASE_ENV=your-env-id
export CLOUDBASE_ACCESS_KEY=your-publishable-key # 可选,匿名访问用
dotnet run --project examples/QuickStart
交互式菜单工具,可逐项选择执行认证、云函数、数据模型、MySQL、云存储、文档数据库(NoSQL)等测试。
dotnet run --project examples/TerminalUI
完整可运行的 Unity 工程,演示在 Unity 中使用 SDK 的核心能力:
- 用 Unity Hub「Add project from disk」选择
examples/UnityGame目录(推荐 Unity 2022.3 LTS)。 - 在
Assets/CloudBaseGame/Resources/CloudBaseConfig.txt中填入环境 ID(或运行时在界面上填写)。 - 打开场景
Assets/CloudBaseGame/Scenes/Demo.unity,点 Play 进入交互式演示菜单。
工程通过 UPM 包 com.tencent.cloudbase 引入 SDK,涵盖登录、数据模型、文档数据库、云存储、云函数等能力。
基础使用示例
- 初始化配置
- 登录状态检查
- 用户注册流程
- 密码登录
- 调用云函数
accessKey 可前往 云开发平台/API Key 配置 中生成
using CloudBase;
// 初始化(异步静态工厂)
var app = await CloudBase.InitAsync(
env: "your-env-id", // 替换为您的环境ID
region: "ap-shanghai", // 地域,默认为上海
accessKey: "your-key", // 填入生成的 Publishable Key
authConfig: new AuthConfig
{
DetectSessionInUrl = true // 可选:自动检测 URL 中的 OAuth 参数
}
);
var auth = app.Auth;
InitAsync 完整参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
env | string | 必填 | TCB 环境 ID |
region | string | ap-shanghai | 地域 |
lang | string | zh-CN | 语言 |
accessKey | string? | null | Publishable Key,用于匿名访问 |
authConfig | AuthConfig? | null | 认证配置(如 DetectSessionInUrl) |
captchaConfig | CaptchaConfig? | null | 验证码配置(如 OnCaptchaRequired 回调) |
store | IKeyValueStore? | null | 键值存储实现,为 null 时使用默认文件存储;服务端多租户建议注入自定义实现 |
httpClient | HttpClient? | null | 自定义 HttpClient(WebGL 平台不可用) |
transport | IHttpTransport? | null | 自定义 HTTP 传输层 |
intl | bool | false | 是否国际站 |
初始化后可通过 app.Auth、app.Storage、app.MySql、app.Apis、app.Functions、app.CloudRun、app.Models、app.Database(...) 访问各模块。使用完毕后可调用 app.Dispose() 释放底层 HttpClient(DI 场景由容器自动管理,无需手动释放)。
// 检查登录状态
async Task<bool> CheckAuthStatusAsync()
{
var result = await auth.GetSessionAsync();
if (result.Error != null)
{
Console.WriteLine($"检查登录状态失败: {result.Error.Message}");
return false;
}
if (result.Data?.Session != null)
{
Console.WriteLine($"用户已登录: {result.Data.User?.Id}");
return true;
}
else
{
Console.WriteLine("用户未登录");
return false;
}
}
// 用户注册示例(两步验证流程 )
async Task RegisterUserAsync(string email, string password)
{
// 第一步:发送验证码
var signUpResult = await auth.SignUpAsync(new SignUpReq
{
Email = email,
Password = password,
});
if (signUpResult.Error != null)
{
Console.WriteLine($"发送验证码失败: {signUpResult.Error.Message}");
return;
}
Console.WriteLine("验证码已发送,等待用户输入...");
// 第二步:验证验证码并完成注册
var verifyResult = await signUpResult.Data!.VerifyOtp!(
new VerifyOtpParams { Token = "用户输入的验证码" }
);
if (verifyResult.Error != null)
{
Console.WriteLine($"注册失败: {verifyResult.Error.Message}");
}
else
{
Console.WriteLine($"注册成功: {verifyResult.Data?.User?.Id}");
}
}
// 密码登录示例
async Task LoginWithPasswordAsync(string email, string password)
{
var result = await auth.SignInWithPasswordAsync(new SignInWithPasswordReq
{
Username = email,
Password = password,
});
if (result.Error != null)
{
Console.WriteLine($"登录失败: {result.Error.Message}");
return;
}
Console.WriteLine($"登录成功: {result.Data?.User?.Id}");
}
// 调用云函数示例
var result = await app.CallFunctionAsync(
name: "hello",
data: new Dictionary<string, object?> { ["name"] = "CloudBase" }
);
if (result.IsSuccess)
{
Console.WriteLine($"执行结果: {result.Result}");
}
else
{
Console.WriteLine($"执行失败: {result.Message}");
}
依赖注入
在 ASP.NET Core / Blazor Server / Worker 等基于 Microsoft.Extensions.DependencyInjection 的场景中,可通过 AddCloudBase 扩展方法将 SDK 注册到 DI 容器。内部通过 IHttpClientFactory 复用连接池,CloudBase 实例以单例懒加载方式初始化(仅初始化一次)。
该能力仅在 .NET(net10.0)目标下可用。
AddCloudBase
IServiceCollection services.AddCloudBase(Action<CloudBaseOptions> configure)
将 CloudBase 注册到依赖注入容器。由于 CloudBase.InitAsync 是异步工厂,DI 无法直接构造,因此注册的是一个访问器 ICloudBaseAccessor,通过 GetAsync() 按需异步获取实例。
参数
配置委托
返回
服务集合(便于链式调用)
示例
- 注册
- 消费(注入访问器)
using CloudBase.DependencyInjection;
// Program.cs
builder.Services.AddCloudBase(options =>
{
options.Env = "your-env-id";
options.Region = "ap-shanghai";
options.AccessKey = "your-key"; // 可选,匿名访问用
});
using CloudBase.DependencyInjection;
// 注入 ICloudBaseAccessor,按需异步获取实例(线程安全,全程复用同一实例)
public class TodoService(ICloudBaseAccessor cloudbase)
{
public async Task<int> CountAsync(CancellationToken ct)
{
var app = await cloudbase.GetAsync(ct);
var res = await app.Database().Collection("todos").Count();
return res.Total;
}
}
认证登录
SignUpAsync
Task<CloudBaseResponse<SignUpResData>> auth.SignUpAsync(SignUpReq @params)
注册新用户账户,采用智能注册并登录流程。
- 创建一个新的用户账户
- 采用智能注册并登录流程:发送验证码 → 等待用户输入 → 智能判断用户存在性 → 自动登录或注册并登录
- 如果用户已存在则直接登录,如果用户不存在则注册新用户并自动登录
参数
返回
示例
- 邮箱注册
- 手机号注册
- 错误处理
var result = await auth.SignUpAsync(new SignUpReq
{
Email = "user@example.com",
Password = "securePassword123",
Nickname = "新用户",
});
if (result.Error != null)
{
Console.WriteLine($"注册失败: {result.Error.Message}");
return;
}
// 验证码验证
var verifyResult = await result.Data!.VerifyOtp!(
new VerifyOtpParams { Token = "123456" }
);
if (verifyResult.IsSuccess)
{
Console.WriteLine($"注册成功: {verifyResult.Data?.User?.Id}");
}
var result = await auth.SignUpAsync(new SignUpReq
{
Phone = "13800138000",
Password = "securePassword123",
});
if (result.Error != null)
{
Console.WriteLine($"发送验证码失败: {result.Error.Message}");
return;
}
var verifyResult = await result.Data!.VerifyOtp!(
new VerifyOtpParams { Token = "123456" }
);
if (verifyResult.IsSuccess)
{
Console.WriteLine($"注册成功: {verifyResult.Data?.User?.Phone}");
}
var result = await auth.SignUpAsync(new SignUpReq
{
Email = "user@example.com",
Password = "password123",
});
if (result.Error != null)
{
var code = result.Error.Code;
switch (code)
{
case "already_exists":
Console.WriteLine("邮箱已被注册");
break;
case "password_too_weak":
Console.WriteLine("密码强度不足");
break;
case "invalid_email":
Console.WriteLine("邮箱格式错误");
break;
default:
Console.WriteLine($"注册失败: {result.Error.Message}");
break;
}
}
SignInAnonymouslyAsync
Task<CloudBaseResponse<SignInResData>> auth.SignInAnonymouslyAsync(string? providerToken = null)
匿名登录,无需用户提供任何凭证即可创建临时账户。
参数
可选的第三方 provider token
返回
示例
- 匿名登录
var result = await auth.SignInAnonymouslyAsync();
if (result.IsSuccess)
{
Console.WriteLine($"匿名登录成功: {result.Data?.User?.Id}");
}
else
{
Console.WriteLine($"匿名登录失败: {result.Error?.Message}");
}
SignInWithPasswordAsync
Task<CloudBaseResponse<SignInResData>> auth.SignInWithPasswordAsync(SignInWithPasswordReq @params)
使用用户名(或邮箱、手机号)和密码登录。
参数
返回
示例
- 密码登录
var result = await auth.SignInWithPasswordAsync(new SignInWithPasswordReq
{
Username = "user@example.com",
Password = "securePassword123",
});
if (result.IsSuccess)
{
Console.WriteLine($"登录成功: {result.Data?.User?.Id}");
}
else
{
Console.WriteLine($"登录失败: {result.Error?.Message}");
}
SignInWithUsernameAsync
Task<CloudBaseResponse<SignInResData>> auth.SignInWithUsernameAsync(
VerificationInfo verificationInfo,
string verificationCode,
string username,
string? loginType = null,
Dictionary<string, object?>? bindInfo = null)
使用用户名(或邮箱、手机号)配合验证码登录。verificationInfo 由 GetVerificationAsync 获取,verificationCode 为用户输入的验证码。
参数
验证信息(由 GetVerificationAsync 返回)
验证码
用户名 / 邮箱 / 手机号
登录类型(可选)
绑定信息(可选)
返回
示例
- 用户名 + 验证码登录
// 1. 先获取验证信息(发送验证码)
var verifyRes = await auth.GetVerificationAsync(new GetVerificationReq
{
Username = "user@example.com",
});
if (verifyRes.Error != null)
{
Console.WriteLine($"获取验证信息失败: {verifyRes.Error.Message}");
return;
}
// 2. 使用验证信息 + 用户输入的验证码登录
var result = await auth.SignInWithUsernameAsync(
verificationInfo: verifyRes.Data!.VerificationInfo!,
verificationCode: "123456",
username: "user@example.com"
);
if (result.IsSuccess)
{
Console.WriteLine($"登录成功: {result.Data?.User?.Id}");
}
else
{
Console.WriteLine($"登录失败: {result.Error?.Message}");
}
SignInWithOtpAsync
Task<CloudBaseResponse<SignInWithOtpResData>> auth.SignInWithOtpAsync(SignInWithOtpReq @params)
使用一次性验证码(OTP)登录。发送验证码后,通过返回数据中的 VerifyOtp 回调完成验证。
参数
返回
示例
- 邮箱验证码登录
var result = await auth.SignInWithOtpAsync(new SignInWithOtpReq
{
Email = "user@example.com",
});
if (result.Error != null)
{
Console.WriteLine($"发送验证码失败: {result.Error.Message}");
return;
}
var verifyResult = await result.Data!.VerifyOtp!(
new VerifyOtpParams { Token = "123456" }
);
if (verifyResult.IsSuccess)
{
Console.WriteLine($"登录成功: {verifyResult.Data?.User?.Id}");
}
SignInWithOAuthAsync
Task<CloudBaseResponse<SignInOAuthResData>> auth.SignInWithOAuthAsync(SignInWithOAuthReq @params)
使用第三方 OAuth 提供商登录(如微信、GitHub 等)。
参数
返回
示例
- OAuth 登录
var result = await auth.SignInWithOAuthAsync(new SignInWithOAuthReq
{
Provider = "wechat",
RedirectTo = "https://your-app.com/callback",
});
if (result.IsSuccess)
{
Console.WriteLine($"请跳转至授权地址: {result.Data?.Url}");
}
SignInWithIdTokenAsync
Task<CloudBaseResponse<SignInResData>> auth.SignInWithIdTokenAsync(SignInWithIdTokenReq @params)
使用第三方 ID Token 登录。
参数
返回
示例
- ID Token 登录
var result = await auth.SignInWithIdTokenAsync(new SignInWithIdTokenReq
{
IdToken = "your-id-token",
Provider = "google",
});
if (result.IsSuccess)
{
Console.WriteLine($"登录成功: {result.Data?.User?.Id}");
}
SignInWithCustomTicketAsync
Task<CloudBaseResponse<SignInResData>> auth.SignInWithCustomTicketAsync(Func<Task<string>> getTicketFn)
使用自定义登录票据(Custom Ticket)登录。通过传入一个异步函数动态获取票据。
参数
返回自定义登录票据的异步函数
返回
示例
- 自定义票据登录
var result = await auth.SignInWithCustomTicketAsync(async () =>
{
// 从您的服务端获取自定义登录票据
return await FetchTicketFromServerAsync();
});
if (result.IsSuccess)
{
Console.WriteLine($"登录成功: {result.Data?.User?.Id}");
}
会话管理
GetSessionAsync
Task<CloudBaseResponse<SignInResData>> auth.GetSessionAsync()
获取当前登录会话信息。如果本地存在有效会话则返回该会话,否则 Data.Session 为 null。
参数
无参数
返回
示例
- 获取会话
var result = await auth.GetSessionAsync();
if (result.Data?.Session != null)
{
Console.WriteLine($"用户已登录: {result.Data.User?.Id}");
}
else
{
Console.WriteLine("用户未登录");
}
RefreshSessionAsync
Task<CloudBaseResponse<SignInResData>> auth.RefreshSessionAsync(string? refreshToken = null)
刷新会话令牌。可传入指定的 refresh token,不传则使用当前会话的 refresh token。
参数
刷新令牌,不传则使用当前会话的令牌
返回
示例
- 刷新会话
var result = await auth.RefreshSessionAsync();
if (result.IsSuccess)
{
Console.WriteLine($"会话已刷新: {result.Data?.Session?.AccessToken}");
}
SetSessionAsync
Task<CloudBaseResponse<SignInResData>> auth.SetSessionAsync(SetSessionReq @params)
手动设置会话(例如从服务端恢复会话)。
参数
返回
示例
- 设置会话
var result = await auth.SetSessionAsync(new SetSessionReq
{
AccessToken = "your-access-token",
RefreshToken = "your-refresh-token",
});
if (result.IsSuccess)
{
Console.WriteLine($"会话已设置: {result.Data?.User?.Id}");
}
SignOutAsync
Task<CloudBaseResponse<object?>> auth.SignOutAsync(SignOutReq? @params = null)
退出登录,清除本地会话。
参数
退出登录参数,可选
返回
示例
- 退出登录
var result = await auth.SignOutAsync();
if (result.IsSuccess)
{
Console.WriteLine("已退出登录");
}
OnAuthStateChange
CloudBaseResponse<OnAuthStateChangeResultData> auth.OnAuthStateChange(OnAuthStateChangeCallback callback)
监听登录状态变化。当用户登录、登出或令牌刷新时触发回调。该方法为同步方法,返回一个可用于取消订阅的对象。
参数
状态变化回调,接收事件类型与会话数据
返回
示例
- 监听登录状态
var subscription = auth.OnAuthStateChange((eventType, session) =>
{
Console.WriteLine($"登录状态变化: {eventType}");
if (session != null)
{
Console.WriteLine($"当前用 户: {session.User?.Id}");
}
});
// 取消订阅
subscription.Data?.Unsubscribe();
GetClaimsAsync
Task<CloudBaseResponse<GetClaimsResData>> auth.GetClaimsAsync()
获取当前用户的 JWT Claims 信息。
参数
无参数
返回
示例
- 获取 Claims
var result = await auth.GetClaimsAsync();
if (result.IsSuccess)
{
Console.WriteLine($"Claims: {result.Data}");
}
用户管理
GetUserAsync
Task<CloudBaseResponse<GetUserResData>> auth.GetUserAsync()
获取当前登录用户的详细信息。
参数
无参数
返回
示例
- 获取用户信息
var result = await auth.GetUserAsync();
if (result.IsSuccess)
{
Console.WriteLine($"用户 ID: {result.Data?.User?.Id}");
Console.WriteLine($"昵称: {result.Data?.User?.Nickname}");
}
RefreshUserAsync
Task<CloudBaseResponse<SignInResData>> auth.RefreshUserAsync()
刷新并重新拉取当前用户信息。
参数
无参数
返回
示例
- 刷新用户信息
var result = await auth.RefreshUserAsync();
if (result.IsSuccess)
{
Console.WriteLine($"用户已刷新: {result.Data?.User?.Nickname}");
}
UpdateUserAsync
Task<CloudBaseResponse<UpdateUserResData>> auth.UpdateUserAsync(UpdateUserReq @params)
更新当前用户的资料信息。
参数
返回
示例
- 更新用户资料
var result = await auth.UpdateUserAsync(new UpdateUserReq
{
Nickname = "新昵称",
AvatarUrl = "https://example.com/avatar.png",
});
if (result.IsSuccess)
{
Console.WriteLine("用户资料已更新");
}
DeleteUserAsync
Task<CloudBaseResponse<object?>> auth.DeleteUserAsync(DeleteUserReq @params)
删除(注销)当前用户账户。
参数
删除用户参数
返回
示例
- 删除用户
var result = await auth.DeleteUserAsync(new DeleteUserReq());
if (result.IsSuccess)
{
Console.WriteLine("账户已注销");
}
身份源管理
GetUserIdentitiesAsync
Task<CloudBaseResponse<GetUserIdentitiesResData>> auth.GetUserIdentitiesAsync()
获取当前用户已绑定的身份源列表。
参数
无参数
返回
示例
- 获取身份源列表
var result = await auth.GetUserIdentitiesAsync();
if (result.IsSuccess)
{
Console.WriteLine($"身份源: {result.Data}");
}
LinkIdentityAsync
Task<CloudBaseResponse<LinkIdentityResData>> auth.LinkIdentityAsync(LinkIdentityReq @params)
为当前用户绑定新的第三方身份源。
参数
返回
示例
- 绑定身份源
var result = await auth.LinkIdentityAsync(new LinkIdentityReq
{
Provider = "wechat",
});
if (result.IsSuccess)
{
Console.WriteLine("身份源已绑定");
}
UnlinkIdentityAsync
Task<CloudBaseResponse<object?>> auth.UnlinkIdentityAsync(UnlinkIdentityReq @params)
解绑当前用户的某个第三方身份源。
参数
返回
示例
- 解绑身份源
var result = await auth.UnlinkIdentityAsync(new UnlinkIdentityReq
{
Provider = "wechat",
});
if (result.IsSuccess)
{
Console.WriteLine("身份源已解绑");
}
密码管理
ResetPasswordForEmailAsync
Task<CloudBaseResponse<ResetPasswordForEmailResData>> auth.ResetPasswordForEmailAsync(string emailOrPhone, string? redirectTo = null)
通过邮箱或手机号发起密码重置流程。
参数
邮箱或手机号
重置成功后的重定向地址
返回
示例
- 邮箱重置密码
var result = await auth.ResetPasswordForEmailAsync(
"user@example.com",
"https://your-app.com/reset"
);
if (result.IsSuccess)
{
Console.WriteLine("密码重置邮件已发送");
}
ResetPasswordForOldAsync
Task<CloudBaseResponse<SignInResData>> auth.ResetPasswordForOldAsync(ResetPasswordForOldReq @params)
通过旧密码修改为新密码。
参数
返回
示例
- 修改密码
var result = await auth.ResetPasswordForOldAsync(new ResetPasswordForOldReq
{
OldPassword = "oldPassword123",
NewPassword = "newPassword456",
});
if (result.IsSuccess)
{
Console.WriteLine("密码已修改");
}
ReauthenticateAsync
Task<CloudBaseResponse<ReauthenticateResData>> auth.ReauthenticateAsync()
对当前用户进行二次身份验证(敏感操作前的重新认证)。
参数
无参数
返回
示例
- 二次验证
var result = await auth.ReauthenticateAsync();
if (result.IsSuccess)
{
Console.WriteLine("二次验证成功");
}
验证管理
GetVerificationAsync
Task<CloudBaseResponse<GetVerificationResData>> auth.GetVerificationAsync(string? email = null, string? phoneNumber = null)
发送验证码到指定邮箱或手机号,返回验证 ID 用于后续验证。
参数
邮箱(与 phoneNumber 二选一)
手机号(与 email 二选一)
返回
示例
- 发送验证码
var result = await auth.GetVerificationAsync(email: "user@example.com");
if (result.IsSuccess)
{
Console.WriteLine($"验证 ID: {result.Data?.VerificationId}");
}
VerifyAsync
Task<CloudBaseResponse<VerifyCodeResData>> auth.VerifyAsync(string verificationId, string verificationCode)
校验用户输入的验证码。
参数
GetVerificationAsync 返回的验证 ID
用户输入的验证码
返回
示例
- 校验验证码
var result = await auth.VerifyAsync("verification-id", "123456");
if (result.IsSuccess)
{
Console.WriteLine("验证码校验通过");
}
VerifyOtpAsync
Task<CloudBaseResponse<SignInResData>> auth.VerifyOtpAsync(VerifyOtpReq @params)
校验 OTP 验证码并完成登录 / 注册。通常通过注册或登录返回数据中的 VerifyOtp 回调调用,也可直接使用此方法。
参数
返回
示例
- 校验 OTP
var result = await auth.VerifyOtpAsync(new VerifyOtpReq
{
Token = "123456",
VerificationId = "verification-id",
});
if (result.IsSuccess)
{
Console.WriteLine($"登录成功: {result.Data?.User?.Id}");
}
VerifyOAuthAsync
Task<CloudBaseResponse<VerifyOAuthResData>> auth.VerifyOAuthAsync(VerifyOAuthReq? @params = null)
校验 OAuth 登录回调,完成 OAuth 登录流程。
参数
OAuth 校验参数,可选(默认从 URL 中检测)
返回
示例
- 校验 OAuth
var result = await auth.VerifyOAuthAsync();
if (result.IsSuccess)
{
Console.WriteLine($"OAuth 登录成功: {result.Data}");
}
ResendAsync
Task<CloudBaseResponse<ResendResData>> auth.ResendAsync(ResendReq @params)
重新发送验证码。
参数
返回
示例
- 重发验证码
var result = await auth.ResendAsync(new ResendReq
{
VerificationId = "verification-id",
});
if (result.IsSuccess)
{
Console.WriteLine("验证码已重新发送");
}
GetCaptchaTokenAsync
Task<string?> app.Captcha.GetCaptchaTokenAsync(bool forceNew = false, string state = "")
获取图形验证码 token。当需要人机验证时,SDK 会通过 CaptchaConfig.OnCaptchaRequired 回调收集用户输入。
参数
是否强制获取新的 token,默认 false
验证状态标识,默认空字符串
返回
验证码 token,获取失败时为 null
示例
- 获取验证码 token
// 初始化时配置人机验证回调
var app = await CloudBase.InitAsync(
env: "your-env-id",
captchaConfig: new CaptchaConfig
{
OnCaptchaRequired = async (state) =>
{
// 弹出您的验证码 UI,返回用户完成验证后的 token
return await ShowCaptchaUiAsync(state);
}
}
);
var token = await app.Captcha.GetCaptchaTokenAsync();
Console.WriteLine($"验证码 token: {token}");
CreateCaptchaDataAsync
Task<CreateCaptchaDataRes> app.Captcha.CreateCaptchaDataAsync(string state)
创建图形验证码数据。
参数
验证状态标识
返回
验证码数据
示例
- 创建验证 码数据
var data = await app.Captcha.CreateCaptchaDataAsync("login");
Console.WriteLine($"验证码数据: {data}");
VerifyCaptchaDataAsync
Task<VerifyCaptchaRes> app.Captcha.VerifyCaptchaDataAsync(string token, string key)
校验图形验证码数据。
参数
验证码 token
验证 key
返回
校验结果
示例
- 校验验证码
var result = await app.Captcha.VerifyCaptchaDataAsync("token", "key");
Console.WriteLine($"校验结果: {result}");
AppendCaptchaTokenToUrlAsync
Task<string> app.Captcha.AppendCaptchaTokenToUrlAsync(
string url,
string state,
bool forceNew = false)
获取验证码 token 并将其作为查询参数追加到指定 URL 上,返回拼接后的 URL。
参数
原始 URL
业务侧的 state 标识
是否强制获取新的 token,默认 false
返回
追加验证码 token 后的 URL
示例
- 追加 token 到 URL
var url = await app.Captcha.AppendCaptchaTokenToUrlAsync(
"https://example.com/api",
"login"
);
Console.WriteLine($"URL: {url}");
FindCaptchaTokenAsync
Task<string?> app.Captcha.FindCaptchaTokenAsync()
查找本地缓存中有效的验证码 token,若不存在或已过期则返回 null。
参数
无参数
返回
缓存的验证码 token,不存在时为 null
示例
- 查找缓存 token
var token = await app.Captcha.FindCaptchaTokenAsync();
Console.WriteLine($"缓存 token: {token}");
ClearCaptchaTokenAsync
Task app.Captcha.ClearCaptchaTokenAsync()
清除本地缓存的验证码 token。
参数
无参数
返回
无返回值
示例
- 清除验证码 token
await app.Captcha.ClearCaptchaTokenAsync();
Console.WriteLine("验证码 token 已清除");
文档型数据库
文档型(NoSQL)数据库通过 app.Database() 获取操作入口 CloudBaseDb,采用链式(fluent)调用风格,与 JS SDK 的 app.database() 对齐。
var db = app.Database(); // 默认实例 / 数据库
var db2 = app.Database("instance", "db"); // 指定实例与数据库
var _ = db.Command; // 获取操作符集合
Database
CloudBaseDb app.Database(string? instance = null, string? database = null)
获取文档型数据库操作入口。
参数
数据库实例标识,默认 (default)
数据库名,默认 (default)
返回
文档型数据库操作入口
示例
- 获取入口
var db = app.Database();
Collection
CollectionReference db.Collection(string collectionName)