firebase_user/api/
token.rs1use 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}