18 个稳定版本 (4 个主要版本)

新版本 4.1.1 2024年8月16日
3.2.0 2024年8月1日
3.1.1 2024年7月26日
2.5.0 2024年5月20日
0.2.1 2022年3月13日

#27 in 身份验证

Download history 35/week @ 2024-04-29 9/week @ 2024-05-06 12/week @ 2024-05-13 152/week @ 2024-05-20 30/week @ 2024-05-27 34/week @ 2024-06-03 38/week @ 2024-06-10 315/week @ 2024-06-17 23/week @ 2024-07-01 93/week @ 2024-07-22 176/week @ 2024-07-29 14/week @ 2024-08-05 360/week @ 2024-08-12

643 每月下载量

MIT 许可证

625KB
6.5K SLoC

Stytch Rust 库

Stytch Rust 库使得在服务器端 Rust 应用程序中使用 Stytch 用户基础设施 API 变得容易。

它与 Stytch Web SDK 或您自己的自定义身份验证流程配合良好。

此库支持的最小 Rust 版本 (MSRV) 是 Rust 1.70。

安装

使用 cargo add stytch 将其添加到您的 Cargo.toml

stytch = "4.1.1"

用法

您可以在 Stytch 控制台 中找到您的 API 凭证。

此客户端库支持 Stytch 的所有实时产品

B2C

B2B

共享

B2C 用例示例

创建 API 客户端

let client = stytch::consumer::client::Client::new(
    String::from("project-live-c60c0abe-c25a-4472-a9ed-320c6667d317"),
    String::from("secret-live-80JASucyk7z_G8Z-7dVwZVGXL5NT_qGAQ2I="),
)?;

通过电子邮件发送魔法链接

use stytch::consumer::magic_links_email::LoginOrCreateRequest;

let resp = client.magic_links.email.login_or_create(LoginOrCreateRequest{
    email: String::from("[email protected]"),
    login_magic_link_url: Some(String::from("https://example.com/authenticate")),
    signup_magic_link_url: Some(String::from("https://example.com/authenticate")),
    ..Default::default()
}).await?;

验证魔法链接中的令牌

use stytch::consumer::magic_links::AuthenticateRequest;

let resp = client.magic_links.authenticate(AuthenticateRequest {
    token: String::from("DOYoip3rvIMMW5lgItikFK-Ak1CfMsgjuiCyI7uuU94="),
    ..Default::default()
})
.await?;

B2B 用例示例

创建 API 客户端

let client = stytch::b2b::client::Client::new(
    project_id: "project-live-c60c0abe-c25a-4472-a9ed-320c6667d317",
    secret: "secret-live-80JASucyk7z_G8Z-7dVwZVGXL5NT_qGAQ2I=",
)?;

创建组织

use stytch::b2b::organizations::CreateRequest;

let resp = client.organizations.create(CreateRequest{
    organization_name: String::from("Acme Co"),
    organization_slug: Some(String::from("acme-co")),
    email_allowed_domains: Some(vec![String::from("acme.co")]),
    ..Default::default()
})
.await?;

将第一个用户登录到组织

use stytch::b2b::magic_links_email::LoginOrSignupRequest;

let resp = client.magic_links.email.login_or_signup(LoginOrSignupRequest{
  organization_id: String::from("organization-id-from-create-response-..."),
  email_address: String::from("[email protected]"),
  ..Default::default()
})
.await?;

错误处理

所有 Result 值的错误类型是 stytch::Error。如果错误来自 Stytch API,这将是一个 stytch::Error::Response 变体,它始终包含一个 error_type 字段,您可以使用它来识别它

let resp = client.magic_links.authenticate(AuthenticateRequest{
    token: String::from("not-a-token!"),
    ..Default::default()
})
.await;

match resp {
    Err(stytch::Error::Response(err)) => {
        if &err.error_type == "invalid_token" {
            println!("Whoops! Try again?");
        } else {
            println!("Unexpected error type: {}", err.error_type);
        }
    }
    Err(err) => println!("Other error: {:?}", err),
    Ok(resp) => println!("Unexpected success: {:?}", resp),
}

有关错误的更多信息,请参阅 文档

Cargo 功能

  • reqwest-rustls-tls:启用 reqwest 的 rustls-tls 功能,以使用 rustls 实现方案。
  • reqwest-native-tls:启用 reqwest 的 native-tls 功能,以使用本地 TLS 实现方案。(此选项默认启用。)

文档

请参阅 Stytch API 参考文档 中所有端点的示例请求和响应。

请遵循 集成指南 之一,或从我们的 示例应用 中开始。

支持

如果您发现了错误,请 提交一个问题

如果您有任何问题或需要帮助进行故障排除,请加入我们的 Slack 或发送邮件至 [email protected]

如果您发现了安全漏洞,请遵循我们的 负责任披露指南

开发

请参阅 DEVELOPMENT.md

行为准则

所有在 Stytch 项目的代码库、问题跟踪器、聊天室和邮件列表中互动的人都有义务遵守 行为准则

致谢

特别感谢 @itsyaasir 向此项目捐赠了 stytch 包名,并开始了我们的 Rust 之旅!

依赖项

~5–17MB
~257K SLoC