入门指南
什么是 Stytch?
Stytch 是一个认证平台,由开发者编写,专为开发者设计,重点关注通过无密码认证技术提升安全和用户体验。Stytch 提供了直接的 API 集成、特定语言的库和 SDK(如本示例),以尽可能简化为您的应用程序设置认证流程的过程。
为什么我应该使用 Stytch SDK?
Stytch 的 SDK 使得无缝注册、验证和参与用户变得简单。iOS SDK 为您在 Apple 平台上使用 Stytch 提供了最简单的方式。只需几行代码,您就可以轻松验证您的用户,并专注于产品核心。
import StytchCore
// Initiate login/signup
_ = try await StytchClient.magicLinks.email.loginOrCreate(parameters: .init(email: userEmail))
// Later, handle the subsequent deeplink
_ = try await StytchClient.handle(url: deeplinkUrl)
我可以用Stytch SDK做什么?
SDK当前支持多种身份验证产品,未来还将推出更多功能!目前支持的产品列表如下。
消费者应用
- 魔法链接
- 通过电子邮件发送/验证魔法链接
- 生物识别
- 通过FaceID/TouchID进行验证
- OTP
- 通过短信、WhatsApp、电子邮件发送/验证一次性密码
- OAuth
- 通过与外部身份提供者(如Apple、Google、Facebook、GitHub等)进行验证
- 密码
- 创建或验证用户
- 检查密码强度
- 重置密码
- TOTP
- 创建一个新的基于时间的一次性密码(TOTP)密钥,用于在验证器应用程序中存储
- 验证TOTP
- 获取用户的恢复代码
- 验证恢复代码
- 会话
- 验证/刷新现有会话
- 撤销会话(注销)
- 用户管理
- 获取或检索当前用户对象(同步/缓存或异步选项可用)
- 根据ID从当前用户中删除因素
B2B应用
- 魔法链接
- 通过电子邮件发送/验证魔法链接
- 通过电子邮件发送/验证发现魔法链接
- 密码
- 验证成员
- 检查密码强度
- 重置密码
- 发现
- 发现成员现有的组织
- 创建一个新的组织
- 交换会话以使用不同的组织
- SSO
- 开始/验证SSO身份验证流程
- 会话
- 验证/刷新现有会话
- 撤销会话(注销)
- 成员
- 获取或检索当前成员对象(同步/缓存或异步选项可用)
- 组织
- 获取或检索当前成员的组织
异步选项
SDK 提供了几种处理异步代码的机制,因此您可以选择最适合您需求的选项。
Async/Await
组合
回调函数
如何开始使用 Stytch?
如果您对 Stytch 完全陌生,使用 SDK 之前,您需要先访问 Stytch 的主页,注册,并在 仪表板 中创建一个新项目。然后您需要调整您的 SDK 配置——将您应用的 bundle id 添加到 授权环境
中,并启用您希望使用的任何 身份验证方法
。
要查看 Stytch SDK 的基本、中级和高级使用的深入示例,请参阅我们的 Stytch 教程!
要求
Stytch iOS SDK 与以下 Apple 平台的应用兼容
- iOS 13+
- macOS 10.15+
- tvOS 13+
安装
Swift Package Manager
Swift Package Manager 是一个管理 Swift 代码分发的工具。它与 Swift 构建系统集成,以自动化下载、编译和链接依赖项的过程。
- 打开 Xcode
- 文件 > 添加包
- 输入 https://github.com/stytchauth/stytch-ios
- 选择包要求(到下一个次要版本,到下一个主要版本等)
Carthage
Carthage 是 Cocoa 的分布式依赖项管理器。要将 Stytch iOS SDK 集成到您的 Xcode 项目中,请将以下内容添加到您的 Cartfile 中。
binary "https://public-assets-stytch-com.s3.amazonaws.com/sdks/swift/carthage/StytchCore.json"
CocoaPods
CocoaPods 是 Swift 和 Objective-C Cocoa 项目的集中式依赖项管理器。要将 Stytch iOS SDK 集成到您的 Xcode 项目中,请将以下内容添加到您的 Podfile 中。
pod 'Stytch/StytchCore'
与其他依赖项管理器不同,在 CocoaPods 中,您将导入 Stytch
而非 StytchCore
。
使用方式
配置
要开始使用 Stytch 客户端(StytchClient 或 StytchB2BClient),您必须通过以下两种技术之一进行配置:1) 自动,通过在主应用包中包含一个 StytchConfiguration.plist
文件(示例)或 2) 在应用程序启动时编程(见下文 .task {}
。)
相关域名
如果您正在使用重定向认证产品(电子邮件魔法链接/OAuth),您需要在 您的网站 和应用程序的权限中设置相关域名(示例)。
手动配置/深链接处理
此示例显示了一个假设的 SwiftUI 应用文件,其中包含自定义配置(见 .task {}
),以及深链接/通用链接处理。
@main
struct YourApp: App {
private let stytchPublicToken = "your-public-token" // Perhaps fetched from your backend
@State private var session: Session?
var body: some Scene {
WindowGroup {
ContentView(session: session)
.task {
StytchClient.configure(publicToken: stytchPublicToken)
}
// Handle web-browsing/universal deeplinks
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
guard let url = userActivity.webpageURL else { return }
handle(url: url)
}
// Handle deeplinks
.onOpenURL(perform: handle(url:))
}
}
private func handle(url: URL) {
Task {
do {
switch try await StytchClient.handle(url: url) {
case let .handled(response):
self.session = response.session
case .notHandled:
// Handle via alternative means
}
} catch { ... }
}
}
}
认证
如在 我可以使用 Stytch SDK 做什么? 中看到,有多种不同的认证产品可供使用。在此,我们将展示使用 OTP 产品的一个简单示例。
一次性密码
本例展示了您可以用于在应用中管理短信认证的可假想类,底层大部分工作委托给StytchClient。
import StytchCore
final class SMSAuthenticationController {
private let onAuthenticate: (Session, User) -> Void
private var methodId: String?
// phoneNumber must be a valid phone number in E.164 format (e.g. +1XXXXXXXXXX)
func login(phoneNumber: String) async throws {
let response = try await StytchClient.otps.loginOrCreate(
parameters: .init(deliveryMethod: .sms(phoneNumber: phoneNumber))
)
// Store the methodId for the subsequent `authenticate(code:)` call
methodId = response.methodId
}
func authenticate(code: String) async throws {
guard let methodId = methodId else { throw YourCustomError }
let response = try await StytchClient.otps.authenticate(
parameters: .init(code: code, methodId: methodId)
)
onAuthenticate(response.session, response.user)
}
}
文档
完整的参考文档可在此处找到。
FAQ
- SDK与API有何不同?
- SDK基本上直接反映了API — 虽然它对与这些方法的交互提供了一种更为明确的看法;为您管理本地状态并引入了一些默认设置(可在相应的初始化/函数参考文档中查看)。使用SDK的主要好处是您可以直接从客户端与Stytch交互,而无需通过您的后端中继调用。
- SDK有哪些默认行为?
- 这里有几点:1) 会话令牌/JWT将存储在/从系统密钥链中检索,因此可以安全地跨应用启动持久保存。2) 会话和用户对象由SDK缓存在内存中,但这些必须首先通过成功的
authenticate
调用接收。3) 在成功进行身份验证调用后,SDK将开始后台轮询以刷新会话及其对应的JWT,以确保JWT始终有效(JWT每5分钟过期,无论会话是否过期。)
- 这里有几点:1) 会话令牌/JWT将存储在/从系统密钥链中检索,因此可以安全地跨应用启动持久保存。2) 会话和用户对象由SDK缓存在内存中,但这些必须首先通过成功的
- 是否有可用指南或示例应用程序来查看此在使用中的样子?
- 是的!这里有可用的UIKit示例消费者应用程序在此。还有一个SwiftUI macOS/iOS 消费者应用程序和包括在此存储库中的UIKit iOS B2B应用程序。
有疑问吗?
请随时通过[email protected]与我们联系,在我们的Slack或论坛中。
许可证
Stytch iOS SDK遵循MIT许可证发布。有关详细信息,请参阅LICENSE。