Firebase Auth - устранение неполадок при повторной аутентификации пользователя с помощью GoogleAuthProvider - PullRequest
0 голосов
/ 10 октября 2018

Согласно документам, мне необходимо повторно подтвердить подлинность пользователя, который пытается удалить свою учетную запись, но еще не выполнил вход.Вот doc (в самом низу):

Документация

Если вы выполните одно из этих действий, и пользователь войдет в системуслишком давно действие завершается ошибкой.Когда это происходит, повторно аутентифицируйте пользователя , получая новые учетные данные для входа от пользователя и передавая учетные данные для reauthenticateWithCredential

var user = firebase.auth().currentUser;
var credential;

// Prompt the user to re-provide their sign-in credentials

user.reauthenticateAndRetrieveDataWithCredential(credential).then(function() {
  // User re-authenticated.
})

Credential?

Моя проблема в том, что получает новые учетные данные для входа от пользователя .Какое значение должна иметь учетная переменная?Согласно комментарию Puff , он должен идти:

var credential = firebase.auth.EmailAuthProvider.credential(email, password);

Мой вопрос: откуда взялись адрес электронной почты и пароль?Так как я использую GoogleSignInAuth , письмо может быть получено с помощью firebase.auth().currentUser.email, поэтому оно будет выглядеть так:

var user = firebase.auth().currentUser;
let credential = firebase.auth.GoogleAuthProvider.credential(firebase.auth().currentUser.email);

user.reauthenticateAndRetrieveDataWithCredential(credential).then(() => {
  // User re-authenticated.
});

Но я получаю ошибку:

{"error": {"code": 400, [{"message": "Невозможно проанализировать Google id_token: qmnofficial@gmail.com", "domain": "global", "reason":"invalid"}]}}

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 октября 2018

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

let credential = firebase.auth.GoogleAuthProvider.credential(firebase.auth().currentUser.email);

в соответствии с документами,

учетные данные (idToken, accessToken) возвращают firebase.auth.OAuthCredential

Создает учетные данные для Google.Требуется по крайней мере один из токена ID и токена доступа.

var credential = firebase.auth.GoogleAuthProvider.credential(id_token);

или

var credential = firebase.auth.GoogleAuthProvider.credential(null,access_token);

для вашего варианта использования сделайте это так,

firebase.auth().currentUser.reauthenticateWithPopup(
    new firebase.auth.GoogleAuthProvider()).then(function(userCredential) {
        // You can now delete the user:
        return firebase.auth().currentUser.delete();  
    }).catch(function(error) {
        // Credential mismatch or some other error.  
    }
);

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...