Firebase Anonymous User после обновления - PullRequest
0 голосов
/ 08 апреля 2020

Я реализую рабочий процесс, в котором каждый пользователь, использующий мое приложение, является анонимным пользователем до тех пор, пока он не войдет в систему или не выполнит вход (электронная почта или Google).

Чтобы подписать up , это просто: я использую linkWithPopup.

Однако у меня были некоторые проблемы с подписью пользователя в : я пытаюсь связать их и, если я получаю ошибку auth/credential-already-in-use (происходит, если пользователь обновляется один раз, выходит из системы, а затем попробуйте войти снова), я их регистрирую.

firebase.auth().currentUser.linkWithPopup(provider).then(function (result) {
        var token = result.credential.accessToken;
        // The signed-in user info.
        var user = result.user;
        // ...
    }).catch(function (error) {
        // Handle Errors here.
        var errorCode = error.code;
        if (errorCode === 'auth/credential-already-in-use') {
            return firebase.auth().signInWithCredential(error.credential);
        }
    }).then((result) => {
        return dispatch(loadContent(result.user.uid))
    }).then(() => {
        history.push('/');
    });

Приведенный выше код работает отлично, и это менее хлопотно, чем делать все самостоятельно.

Однако как удалить анонимных пользователей, которые были созданы и осиротели, если пользователь подписал в ?

Я пытался сделать ссылку на старого бесполезного анонимного пользователя и удалить его после того, как пользователь подписан в (и так, изменил свою учетную запись), но он, очевидно, не работает, потому что учетная запись изменилась, и это было бы большим недостатком безопасности, если бы пользователь мог удалить другой ...

Я не очень знаком с экосистемой Firebase, как мне справиться с этим? Нужно ли использовать комбинацию Firebase Cloud Function и Firebase Admin SDK или есть стандартный способ решения этой проблемы?

1 Ответ

1 голос
/ 10 апреля 2020

Это довольно просто. API пользователя продолжают работать, даже если пользователь не является текущим.

const anonymousUser = firebase.auth().currentUser;
firebase.auth().currentUser.linkWithPopup(provider)
  .then(function (result) {
    var token = result.credential.accessToken;
    // The signed-in user info.
    var user = result.user;
    // ...
  }).catch(function (error) {
    // Handle Errors here.
    var errorCode = error.code;
    if (errorCode === 'auth/credential-already-in-use') {
        return firebase.auth().signInWithCredential(error.credential);
    }
  }).then((result) => {
    if (anonymousUser.uid !== result.user.uid) {
      return anonymousUser.delete()
        .then(() => {
          return result;
        });
    }
    return result;
  }).then((result) => {
    return dispatch(loadContent(result.user.uid))
  }).then(() => {
    history.push('/');
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...