firebase_user/api/
token.rs

1use super::FailResponse;
2use crate::error::Error;
3use serde::{Deserialize, Serialize};
4
5impl crate::FireAuth {
6    pub async fn refresh_id_token(&self, refresh_token: &str) -> Result<RefreshIdToken, Error> {
7        let url = format!(
8            "https://securetoken.googleapis.com/v1/token?key={}",
9            self.api_key,
10        );
11
12        let client = reqwest::Client::new();
13        let resp = client
14            .post(url)
15            .header("Content-Type", "application/json")
16            .json(&RefreshIdTokenPayload {
17                grant_type: "refresh_token",
18                refresh_token,
19            })
20            .send()
21            .await?;
22
23        if resp.status() != 200 {
24            let error = resp.json::<FailResponse>().await?.error;
25            return Err(Error::Token(error.message));
26        }
27
28        let body = resp.json::<RefreshIdToken>().await?;
29        Ok(body)
30    }
31}
32
33#[derive(Debug, Serialize)]
34struct RefreshIdTokenPayload<'a> {
35    grant_type: &'a str,
36    refresh_token: &'a str,
37}
38
39#[derive(Debug, Serialize, Deserialize)]
40pub struct RefreshIdToken {
41    pub access_token: String,
42    pub expires_in: String,
43    pub token_type: String,
44    pub refresh_token: String,
45    pub id_token: String,
46    pub user_id: String,
47    pub project_id: String,
48}