Skip to main content

firebase_admin/auth/session_cookie/
create.rs

1//! Session cookie creation via the Identity Toolkit `:createSessionCookie` endpoint.
2
3use crate::auth::error::{parse_identity_toolkit_response, AuthError};
4use crate::core::HttpClient;
5use serde::{Deserialize, Serialize};
6use std::time::Duration;
7
8#[derive(Debug, Serialize)]
9struct CreateSessionCookieRequest<'a> {
10    #[serde(rename = "idToken")]
11    id_token: &'a str,
12    #[serde(rename = "validDuration")]
13    valid_duration_secs: u64,
14}
15
16#[derive(Debug, Deserialize)]
17struct CreateSessionCookieResponse {
18    #[serde(rename = "sessionCookie")]
19    session_cookie: String,
20}
21
22/// Exchanges a verified ID token for a long-lived session cookie.
23///
24/// `endpoint` is the fully-qualified `:createSessionCookie` URL, which
25/// differs between live and emulator [`crate::auth::mode::ClientMode`].
26pub async fn create_session_cookie(
27    http: &HttpClient,
28    endpoint: &str,
29    id_token: &str,
30    valid_duration: Duration,
31) -> Result<String, AuthError> {
32    let body = CreateSessionCookieRequest {
33        id_token,
34        valid_duration_secs: valid_duration.as_secs(),
35    };
36
37    let response = http.inner().post(endpoint).json(&body).send().await?;
38    let parsed: CreateSessionCookieResponse = parse_identity_toolkit_response(response).await?;
39
40    Ok(parsed.session_cookie)
41}