@@ -485,7 +485,26 @@ void AssignLoadedData(const Future<std::string>& future, AuthData* auth_data) {
485485 loaded_user.last_sign_in_timestamp = userData->last_sign_in_timestamp ();
486486 loaded_user.creation_timestamp = userData->creation_timestamp ();
487487
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);
489508}
490509
491510void HandleLoadedData (const Future<std::string>& future, void * auth_data) {
@@ -534,6 +553,26 @@ Future<void> UserDataPersist::SaveUserData(AuthData* auth_data) {
534553 // Build up a serialized buffer algorithmically:
535554 flatbuffers::FlatBufferBuilder builder;
536555
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+
537576 // Compile data using schema
538577 auto uid = builder.CreateString (user->uid );
539578 auto email = builder.CreateString (user->email );
@@ -551,7 +590,7 @@ Future<void> UserDataPersist::SaveUserData(AuthData* auth_data) {
551590 user->is_anonymous , user->is_email_verified , id_token, refresh_token,
552591 access_token, user->access_token_expiration_date ,
553592 user->has_email_password_credential , user->last_sign_in_timestamp ,
554- user->creation_timestamp );
593+ user->creation_timestamp , provider_data_list );
555594 builder.Finish (desktop);
556595
557596 std::string save_string;
0 commit comments