firebase_wasm/auth/
user.rs1use serde::Deserialize;
2use wasm_bindgen::{prelude::*, JsCast};
3
4use crate::FirebaseError;
5
6use super::AuthError;
7
8impl User {
9 pub async fn delete(&self) -> Result<(), AuthError> {
10 self.delete_js()
11 .await
12 .map_err(|err| err.unchecked_into::<FirebaseError>().into())
13 }
14
15 pub async fn get_id_token_result(&self, force_refresh: bool) -> Result<IdTokenResult, JsValue> {
16 self.get_id_token_result_js(force_refresh)
17 .await
18 .map(Into::into)
19 }
20
21 pub async fn get_id_token(&self, force_refresh: bool) -> Result<String, JsValue> {
22 self.get_id_token_js(force_refresh)
23 .await
24 .map(JsCast::unchecked_into::<js_sys::JsString>)
25 .map(|token| String::try_from(token).expect("token to be a string"))
26 }
27}
28
29impl ParsedToken {
30 pub fn custom_claims<T>(&self) -> Result<T, serde_wasm_bindgen::Error>
31 where
32 T: for<'de> Deserialize<'de>,
33 {
34 serde_wasm_bindgen::from_value::<T>(self.unchecked_ref::<JsValue>().to_owned())
35 }
36}
37
38#[wasm_bindgen(module = "firebase/auth")]
39extern "C" {
40 #[derive(Clone, Debug)]
41 #[wasm_bindgen(extends = UserInfo, typescript_type = r#"import("firebase/auth").User"#)]
42 pub type User;
43 #[derive(Clone, Debug)]
44 pub type UserMetadata;
45 #[derive(Clone, Debug)]
46 pub type UserInfo;
47 #[derive(Clone, Debug)]
48 pub type IdTokenResult;
49 #[derive(Clone, Debug)]
50 pub type ParsedToken;
51 #[derive(Clone, Debug)]
52 pub type Firebase;
53
54 #[wasm_bindgen(method, getter, js_name = displayName)]
59 pub fn display_name(this: &UserInfo) -> Option<String>;
60
61 #[wasm_bindgen(method, getter, js_name = email)]
62 pub fn email(this: &UserInfo) -> Option<String>;
63
64 #[wasm_bindgen(method, getter, js_name = phoneNumber)]
65 pub fn phone_number(this: &UserInfo) -> Option<String>;
66
67 #[wasm_bindgen(method, getter, js_name = photoURL)]
68 pub fn photo_url(this: &UserInfo) -> Option<String>;
69
70 #[wasm_bindgen(method, getter, js_name = providerId)]
71 pub fn provider_id(this: &UserInfo) -> String;
72
73 #[wasm_bindgen(method, getter, js_name = uid)]
74 pub fn uid(this: &UserInfo) -> String;
75
76 #[wasm_bindgen(method, getter, js_name = creationTime)]
81 pub fn creation_time(this: &UserMetadata) -> String;
82
83 #[wasm_bindgen(method, getter, js_name = lastSignInTime)]
84 pub fn last_sign_in_time(this: &UserMetadata) -> String;
85
86 #[wasm_bindgen(method, getter, js_name = emailVerified)]
91 pub fn email_verified(this: &User) -> bool;
92
93 #[wasm_bindgen(method, getter, js_name = isAnonymous)]
94 pub fn is_anonymous(this: &User) -> bool;
95
96 #[wasm_bindgen(getter)]
97 pub fn metadata(this: &User) -> UserMetadata;
98
99 #[wasm_bindgen(method, getter, js_name = providerData)]
100 pub fn provider_data(this: &User) -> Vec<UserInfo>;
101
102 #[wasm_bindgen(method, getter, js_name = refreshToken)]
103 pub fn refresh_token(this: &User) -> String;
104
105 #[wasm_bindgen(method, getter, js_name = tenantId)]
106 pub fn tenant_id(this: &User) -> String;
107
108 #[wasm_bindgen(method, js_name = delete, catch)]
109 async fn delete_js(this: &User) -> Result<(), JsValue>;
110
111 #[wasm_bindgen(method, js_name = getIdToken, catch)]
112 async fn get_id_token_js(this: &User, force_refresh: bool) -> Result<JsValue, JsValue>;
113
114 #[wasm_bindgen(method, js_name = getIdTokenResult, catch)]
115 async fn get_id_token_result_js(this: &User, force_refresh: bool) -> Result<JsValue, JsValue>;
116
117 #[wasm_bindgen(method, catch)]
118 async fn reload(this: &User) -> Result<(), JsValue>;
119
120 #[wasm_bindgen(method, js_name = toJSON)]
121 pub fn to_json(this: &User) -> js_sys::Object;
122
123 #[wasm_bindgen(method, getter, js_name = authTime)]
128 pub fn auth_time(this: &IdTokenResult) -> String;
129
130 #[wasm_bindgen(method, getter, js_name = expirationTime)]
131 pub fn expiration_time(this: &IdTokenResult) -> String;
132
133 #[wasm_bindgen(method, getter, js_name = issuedAtTime)]
134 pub fn issued_at_time(this: &IdTokenResult) -> String;
135
136 #[wasm_bindgen(method, getter, js_name = signInProvider)]
137 pub fn sign_in_provider(this: &IdTokenResult) -> Option<String>;
138
139 #[wasm_bindgen(method, getter, js_name = signInSecondFactor)]
140 pub fn sign_in_second_factor(this: &IdTokenResult) -> Option<String>;
141
142 #[wasm_bindgen(method, getter, js_name = token)]
143 pub fn token(this: &IdTokenResult) -> Option<String>;
144
145 #[wasm_bindgen(method, getter, js_name = claims)]
146 pub fn claims(this: &IdTokenResult) -> ParsedToken;
147
148 #[wasm_bindgen(method, getter)]
153 pub fn exp(this: &ParsedToken) -> Option<String>;
154
155 #[wasm_bindgen(method, getter)]
156 pub fn sub(this: &ParsedToken) -> Option<String>;
157
158 #[wasm_bindgen(method, getter)]
159 pub fn auth_time(this: &ParsedToken) -> Option<String>;
160
161 #[wasm_bindgen(method, getter)]
162 pub fn iat(this: &ParsedToken) -> Option<String>;
163
164 #[wasm_bindgen(method, getter)]
165 pub fn firebase(this: &ParsedToken) -> Option<Firebase>;
166
167 #[wasm_bindgen(method, getter)]
172 pub fn sign_in_provider(this: &Firebase) -> Option<Firebase>;
173
174 #[wasm_bindgen(method, getter)]
175 pub fn sign_in_second_factor(this: &Firebase) -> Option<Firebase>;
176
177 #[wasm_bindgen(method, getter)]
178 pub fn identities(this: &Firebase) -> Option<js_sys::Object>;
179}