@@ -485,7 +485,26 @@ void AssignLoadedData(const Future<std::string>& future, AuthData* auth_data) {
485
485
loaded_user.last_sign_in_timestamp = userData->last_sign_in_timestamp ();
486
486
loaded_user.creation_timestamp = userData->creation_timestamp ();
487
487
488
- UserView::ResetUser (auth_data, loaded_user);
488
+ std::vector<UserInfoImpl> loaded_provider_data;
489
+ const auto & provider_data = userData->provider_data ();
490
+ if (provider_data) {
491
+ for (size_t i = 0 ; i < provider_data->size (); ++i) {
492
+ auto providerData = provider_data->Get (i);
493
+
494
+ UserInfoImpl loaded_user_info;
495
+ loaded_user_info.uid = providerData->uid ()->c_str ();
496
+ loaded_user_info.email = providerData->email ()->c_str ();
497
+ loaded_user_info.display_name = providerData->display_name ()->c_str ();
498
+ loaded_user_info.photo_url = providerData->photo_url ()->c_str ();
499
+ loaded_user_info.provider_id = providerData->provider_id ()->c_str ();
500
+ loaded_user_info.phone_number = providerData->phone_number ()->c_str ();
501
+
502
+ loaded_provider_data.push_back (loaded_user_info);
503
+ }
504
+ }
505
+
506
+ auto writer = UserView::ResetUser (auth_data, loaded_user);
507
+ writer.ResetUserInfos (loaded_provider_data);
489
508
}
490
509
491
510
void HandleLoadedData (const Future<std::string>& future, void * auth_data) {
@@ -534,6 +553,26 @@ Future<void> UserDataPersist::SaveUserData(AuthData* auth_data) {
534
553
// Build up a serialized buffer algorithmically:
535
554
flatbuffers::FlatBufferBuilder builder;
536
555
556
+ const auto & user_infos = user.GetUserInfos ();
557
+
558
+ auto create_callback = [&builder, &user_infos](size_t index ){
559
+ const auto & user_info = user_infos[index ];
560
+
561
+ auto uid = builder.CreateString (user_info->uid ());
562
+ auto email = builder.CreateString (user_info->email ());
563
+ auto display_name = builder.CreateString (user_info->display_name ());
564
+ auto photo_url = builder.CreateString (user_info->photo_url ());
565
+ auto provider_id = builder.CreateString (user_info->provider_id ());
566
+ auto phone_number = builder.CreateString (user_info->phone_number ());
567
+
568
+ return CreateUserProviderData (
569
+ builder, uid, email, display_name, photo_url, provider_id, phone_number);
570
+ };
571
+
572
+ auto provider_data_list =
573
+ builder.CreateVector <flatbuffers::Offset<UserProviderData>>(
574
+ user_infos.size (), create_callback);
575
+
537
576
// Compile data using schema
538
577
auto uid = builder.CreateString (user->uid );
539
578
auto email = builder.CreateString (user->email );
@@ -551,7 +590,7 @@ Future<void> UserDataPersist::SaveUserData(AuthData* auth_data) {
551
590
user->is_anonymous , user->is_email_verified , id_token, refresh_token,
552
591
access_token, user->access_token_expiration_date ,
553
592
user->has_email_password_credential , user->last_sign_in_timestamp ,
554
- user->creation_timestamp );
593
+ user->creation_timestamp , provider_data_list );
555
594
builder.Finish (desktop);
556
595
557
596
std::string save_string;
0 commit comments