# #firebase #flutter #firebase-authentication
Вопрос:
В моем приложении пользователи входят в систему анонимно. Если кто-то удалит приложение и переустановит его, новый сгенерированный идентификатор uid будет отличаться от старого. Есть ли какой-то способ вернуть экземпляр аутентификации firebase, чтобы использовать более старый идентификатор uid вместо нового?
Комментарии:
1. Вы не можете определить пользовательский UID, потому что функция signInAnonymously не поддерживается. Док: firebase.google.com/docs/reference/js/v8/…
2. Могу ли я каким-то образом сгенерировать токен из старого UID firestore и использовать его для входа в систему?
Ответ №1:
После того, как пользователь вышел из поставщика анонимной аутентификации Firebase, невозможно восстановить этот идентификатор UID через этого поставщика. Учитывая, что пользователю не нужно предоставлять какие-либо учетные данные для анонимного входа, предоставление ему права требовать определенного идентификатора UID будет представлять большую угрозу безопасности.
Единственным вариантом было бы создать собственного поставщика для аутентификации Firebase и предоставить пользователю тот же идентификатор UID, что и раньше, после того, как вы убедитесь, что это один и тот же пользователь.
Комментарии:
1. Я могу проверить, что UID1 на самом деле тот же пользователь, что и UID0, используя firebase. Но я, похоже, не могу войти в UID0, используя методы входа в Firebase. Метод пользовательского токена, как я понял, генерируется только для уже зарегистрированного пользователя UID1, так что это тоже не помогло.
2. При создании пользовательского токена вы управляете UID. Смотрите фрагмент кода здесь: firebase.google.com/docs/auth/admin/. … Таким образом, это означает, что вы можете создать пользовательский токен для UID0. В качестве альтернативы вы можете «перенести» данные в новый UID пользователя (изменив UID в своей базе данных), что является распространенным решением этой проблемы.
3. Спасибо, Фрэнк, это действительно помогло. Я попытаюсь выяснить, как получить этот токен без использования доступа администратора или написания API в облаке.