For more detailed documentation, please reference the below links:
This SDK is updated frequently to keep up with any changes to the actual Clerk API. If you see anything that needs updated or is not inline with the official Clerk api, please open an issue!
Checkout examples in the
/examples
directory
use tokio;
use clerk_rs::{clerk::Clerk, ClerkConfiguration, endpoints::ClerkGetEndpoint};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = ClerkConfiguration::new(None, None, Some("sk_test_key".to_string()), None);
let client = Clerk::new(config);
let res = client.get(ClerkGetEndpoint::GetUserList).await?;
Ok(())
}
use tokio;
use clerk_rs::{clerk::Clerk, ClerkConfiguration, apis::emails_api::Email};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = ClerkConfiguration::new(None, None, Some("sk_test_key".to_string()), None);
let client = Clerk::new(config);
Email::create(&client, Some(your_clerk_email));
Ok(())
}
With the actix
feature enabled:
use actix_web::{web, App, HttpServer, Responder};
use clerk_rs::{
clerk::Clerk,
validators::{actix::ClerkMiddleware, jwks::MemoryCacheJwksProvider},
ClerkConfiguration,
};
async fn index() -> impl Responder {
"Hello world!"
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
let config = ClerkConfiguration::new(None, None, Some("your_secret_key".to_string()), None);
let clerk = Clerk::new(config);
App::new()
.wrap(ClerkMiddleware::new(MemoryCacheJwksProvider::new(clerk), None, true))
.route("/index", web::get().to(index))
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
With the axum
feature enabled:
use axum::{routing::get, Router};
use clerk_rs::{
clerk::Clerk,
validators::{axum::ClerkLayer, jwks::MemoryCacheJwksProvider},
ClerkConfiguration,
};
async fn index() -> &'static str {
"Hello world!"
}
#[tokio::main]
async fn main() -> std::io::Result<()> {
let config = ClerkConfiguration::new(None, None, Some("your_secret_key".to_string()), None);
let clerk = Clerk::new(config);
let app = Router::new()
.route("/index", get(index))
.layer(ClerkLayer::new(MemoryCacheJwksProvider::new(clerk), None, true));
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await?;
axum::serve(listener, app).await
}
With the rocket
feature enabled:
use clerk_rs::{
clerk::Clerk,
validators::{
jwks::MemoryCacheJwksProvider,
rocket::{ClerkGuard, ClerkGuardConfig},
},
ClerkConfiguration,
};
use rocket::{
get, launch, routes,
serde::{Deserialize, Serialize},
};
#[derive(Serialize, Deserialize)]
struct Message {
content: String,
}
#[get("/")]
fn index(jwt: ClerkGuard<MemoryCacheJwksProvider>) -> &'static str {
"Hello world!"
}
#[launch]
fn rocket() -> _ {
let config = ClerkConfiguration::new(None, None, Some("sk_test_F9HM5l3WMTDMdBB0ygcMMAiL37QA6BvXYV1v18Noit".to_string()), None);
let clerk = Clerk::new(config);
let clerk_config = ClerkGuardConfig::new(
MemoryCacheJwksProvider::new(clerk),
None,
true, // validate_session_cookie
);
rocket::build().mount("/", routes![index]).manage(clerk_config)
}
- Support other http clients along with the default reqwest client (like hyper)
- Tokio and async-std async runtimes for hyper clients
- Optional reqwest blocking client
- Support authorization via __session cookie on same-origin
- Add validator support for axum, rocket, warp