@@ -15,7 +15,6 @@ import (
15
15
)
16
16
17
17
func main () {
18
-
19
18
ctx , cancel := context .WithTimeout (context .Background (), 30 * time .Second )
20
19
defer cancel ()
21
20
@@ -29,6 +28,9 @@ func main() {
29
28
// Example: Firebase Authentication
30
29
firebaseExample (ctx , auth )
31
30
31
+ // Example: BaseUser model
32
+ userModelExample (ctx , auth )
33
+
32
34
// Example: Cloudflare Storage
33
35
cloudflareExample (ctx )
34
36
@@ -83,6 +85,83 @@ func firebaseExample(ctx context.Context, auth *firebase.FirebaseAuth) {
83
85
}
84
86
}
85
87
88
+ func userModelExample (ctx context.Context , auth * firebase.FirebaseAuth ) {
89
+ fmt .Println ("\n === BaseUser Model Example ===" )
90
+
91
+ // Define an application-specific user data type
92
+ type AppUserData struct {
93
+ Preferences map [string ]string `json:"preferences"`
94
+ LastActive time.Time `json:"lastActive"`
95
+ ProfileComplete bool `json:"profileComplete"`
96
+ }
97
+
98
+ // Create a test user
99
+ userParams := (& officialFirebaseAuth.UserToCreate {}).
100
+
101
+ Password ("password123" ).
102
+ DisplayName ("Base User Test" )
103
+
104
+ uid , err := auth .CreateUser (ctx , userParams )
105
+ if err != nil {
106
+ log .Printf ("Failed to create user: %v" , err )
107
+ return
108
+ }
109
+ log .Printf ("Created user with Firebase UID: %s" , uid )
110
+
111
+ // Set some custom claims
112
+ claims := map [string ]interface {}{
113
+ "admin" : true ,
114
+ "roles" : []interface {}{"editor" , "viewer" },
115
+ "level" : 5 ,
116
+ }
117
+
118
+ if err := auth .SetCustomClaims (ctx , uid , claims ); err != nil {
119
+ log .Printf ("Failed to set custom claims: %v" , err )
120
+ }
121
+
122
+ // Get the Firebase user
123
+ fbUser , err := auth .GetUserByUID (ctx , uid )
124
+ if err != nil {
125
+ log .Printf ("Failed to get user: %v" , err )
126
+ return
127
+ }
128
+
129
+ // Create app-specific user data
130
+ userData := AppUserData {
131
+ Preferences : map [string ]string {
132
+ "theme" : "dark" ,
133
+ "language" : "en" ,
134
+ },
135
+ LastActive : time .Now (),
136
+ ProfileComplete : false ,
137
+ }
138
+
139
+ // Convert to our BaseUser model
140
+ baseUser := firebase .FromFirebaseUser [AppUserData ](fbUser , userData )
141
+
142
+ // Display the user model
143
+ log .Printf ("BaseUser created with ID: %s (different from Firebase UID: %s)" ,
144
+ baseUser .ID , baseUser .FirebaseUID )
145
+
146
+ // Demonstrate claims/roles helpers
147
+ isAdmin , _ := baseUser .GetClaim ("admin" )
148
+ log .Printf ("User is admin: %v" , isAdmin )
149
+
150
+ log .Printf ("User has editor role: %v" , baseUser .HasRole ("editor" ))
151
+ log .Printf ("User has admin role: %v" , baseUser .HasRole ("admin" ))
152
+
153
+ // Show app-specific data
154
+ log .Printf ("User preferences: %v" , baseUser .Data .Preferences )
155
+ log .Printf ("Profile complete: %v" , baseUser .Data .ProfileComplete )
156
+
157
+ // Clean up - delete user
158
+ if err := auth .DeleteUser (ctx , uid ); err != nil {
159
+ log .Printf ("Failed to delete user: %v" , err )
160
+ } else {
161
+ log .Printf ("Deleted user: %s" , uid )
162
+ }
163
+ }
164
+
86
165
func cloudflareExample (ctx context.Context ) {
87
166
fmt .Println ("\n === Cloudflare Storage Example ===" )
88
167
0 commit comments