26 stable releases (6 major)
6.2.0 | Dec 1, 2024 |
---|---|
6.1.0 | Nov 14, 2024 |
5.3.0 | Oct 29, 2024 |
4.1.2 | Sep 17, 2024 |
0.2.1 | Mar 13, 2022 |
#38 in Authentication
453 downloads per month
685KB
7.5K
SLoC
Stytch Rust Library
The Stytch Rust library makes it easy to use the Stytch user infrastructure API in server-side Rust applications.
It pairs well with the Stytch Web SDK or your own custom authentication flow.
The minimum supported Rust version (MSRV) of this library is Rust 1.70.
Install
Use cargo add stytch
to add this to your Cargo.toml
:
stytch = "5.1.0"
Usage
You can find your API credentials in the Stytch Dashboard.
This client library supports all of Stytch's live products:
B2C
- Email Magic Links
- Embeddable Magic Links
- OAuth logins
- SMS passcodes
- WhatsApp passcodes
- Email passcodes
- Session Management
- WebAuthn
- User Management
- Time-based one-time passcodes (TOTPs)
- Crypto wallets
- Passwords
B2B
- Organizations
- Members
- Email Magic Links
- OAuth logins
- Session Management
- Single-Sign On
- Discovery
- Passwords
Shared
Example B2C usage
Create an API client:
let client = stytch::consumer::client::Client::new(
String::from("project-live-c60c0abe-c25a-4472-a9ed-320c6667d317"),
String::from("secret-live-80JASucyk7z_G8Z-7dVwZVGXL5NT_qGAQ2I="),
)?;
Send a magic link by email:
use stytch::consumer::magic_links_email::LoginOrCreateRequest;
let resp = client.magic_links.email.login_or_create(LoginOrCreateRequest{
email: String::from("sandbox@stytch.com"),
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?;
Authenticate the token from the magic link:
use stytch::consumer::magic_links::AuthenticateRequest;
let resp = client.magic_links.authenticate(AuthenticateRequest {
token: String::from("DOYoip3rvIMMW5lgItikFK-Ak1CfMsgjuiCyI7uuU94="),
..Default::default()
})
.await?;
Example B2B usage
Create an API client:
let client = stytch::b2b::client::Client::new(
project_id: "project-live-c60c0abe-c25a-4472-a9ed-320c6667d317",
secret: "secret-live-80JASucyk7z_G8Z-7dVwZVGXL5NT_qGAQ2I=",
)?;
Create an organization
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?;
Log the first user into the organization
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("admin@acme.co"),
..Default::default()
})
.await?;
Handling Errors
The error type for all Result
values is stytch::Error
. If the error is from the Stytch API,
this will be the stytch::Error::Response
variant, which always includes an error_type
field
you can use to identify it:
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),
}
Learn more about errors in the docs.
Cargo Features
reqwest-rustls-tls
: Enable reqwest'srustls-tls
feature for the rustls implementation.reqwest-native-tls
: Enable reqwest'snative-tls
feature for the native TLS implementation. (This is enabled by default.)
Documentation
See example requests and responses for all the endpoints in the Stytch API Reference.
Follow one of the integration guides or start with one of our example apps.
Support
If you've found a bug, open an issue!
If you have questions or want help troubleshooting, join us in Slack or email support@stytch.com.
If you've found a security vulnerability, please follow our responsible disclosure instructions.
Development
See DEVELOPMENT.md
Code of Conduct
Everyone interacting in the Stytch project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
Acknowledgements
Special thanks to @itsyaasir for donating the stytch
package name to this project and starting us on our Rust journey!
Dependencies
~8–20MB
~277K SLoC