2016-08-22 2 views
4

Я имею дело с Firebase аутентификацией для Интернета. В documentation говорится, чтоFirebase: последний вход в систему запрошен

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

Если нет, запрос завершится с кодом ошибки auth/requires-recent-login, и я должен управлять этим случаем, предложив пользователю повторно вставить свои учетные данные. После того, как я сделал это, я мог бы легко повторно проверить подлинность пользователя с помощью следующего кода:

firebase.auth().currentUser.reauthenticate(credential) 

В API reference есть некоторые детали больше. Оказывается, credential на самом деле является объектом типа firebase.auth.AuthCredential. Это, как говорится, у меня есть еще куча вопросов, на которые я не мог найти ответ на документы:

  1. Как создать AuthCredential объект?
  2. Что еще более важно, как мне работать с провайдерами (Google, Facebook, ...). Я согласен с тем, что изменение адреса электронной почты/пароля не имеет смысла для поставщиков, поскольку это неправильное место для их изменения, поэтому повторная аутентификация в этом случае не применяется. Тем не менее, удаление пользователя по-прежнему является действием, требующим повторной аутентификации, и это может быть выполнено независимо от метода аутентификации. Как повторно аутентифицировать пользователя, который вошел в систему с поставщиком?
  3. В документации указано, что пользователь должен был войти в систему недавно. Я не смог найти какое-либо определение последних в документах.

ответ

3
  1. Вы можете инициализировать верительных, вызвав удостоверении статический метод любого поставщика (в том числе электронной почты/поставщика пароля): firebase.auth.FacebookAuthProvider.credential(fbAccessToken);

  2. Для Reauthenticate поставщика OAuth, вы можете позвонить в браузере signInWithPopup или перенаправить. Это вернет объект с двумя полями: пользователем и учетными данными. Вы можете использовать эти учетные данные напрямую. Вот упрощенный пример:

    var tempApp = firebase.initializeApp(originalConfig, 'temp'); var provider = new firebase.auth.FacebookAuthProvider(); tempApp.signInWithPopup(provider).then(function(result)) { tempApp.auth().signOut(); originalApp.auth().currentUser.reauthenticate(credential); });

  3. Это не имеет значения, так как firebase Auth бэкенд может изменить эту ситуацию. Вы не должны жестко кодировать это значение. Вместо этого попытайтесь поймать эту ошибку и действовать соответствующим образом, когда это произойдет.

+0

Благодарим за информацию. Но как вы получаете fbAccessToken? – Richard

+0

Каков ваш прецедент? 1. предполагает, что у вас уже есть это. Возможно, из facebook sdk. – bojeil

Смежные вопросы