#angular #firebase-authentication
#angular #firebase-аутентификация
Вопрос:
Я использую Firebase в приложении Angular 7, чтобы разрешить пользователям входить в систему с помощью опции email / link.
Теперь мне нужно разрешить пользователям удалять свои собственные учетные записи, если они хотят.
Прежде чем разрешить пользователю удалить учетную запись, я должен повторно аутентифицировать ее, используя «учетные данные».
Чтобы получить эти учетные данные, мне нужно использовать
firebase.auth.EmailAuthProvider.credentialWithLink(email, emailLink)
Первый параметр «email» уже хранится в localStorage, но я не знаю, как получить второй параметр «emailLink».
const user = firebase.auth().currentUser;
const credential = firebase.auth.EmailAuthProvider.credentialWithLink(
'example@test.com',
'HOW TO GET THIS PARAM???'
);
user
.reauthenticateAndRetrieveDataWithCredential(credential)
.then(function() {
// DELETE USER HERE.
});
Мне нужно знать процесс получения параметра «emailLink».
Спасибо.
Ответ №1:
Вход по ссылке электронной почты состоит из 2 шагов:
Сначала вам нужно отправить ссылку на электронное письмо.
const linkId = randomId();
const actionCodeSettings = {
url: 'https://www.example.com/finishSignUp?linkId=' linkId,
// This must be true.
handleCodeInApp: true
};
firebase.auth().sendSignInLinkToEmail(email, actionCodeSettings)
.then(function() {
window.localStorage.setItem('emailForSignIn', email);
window.localStorage.setItem('linkId', linkId);
})
.catch(function(error) {
// Some error occurred, you can inspect the code: error.code
});
Затем вам необходимо выполнить вход или повторную авторизацию по ссылке, которая содержит OTP на странице https://www.example.com/finishSignUp
.
Вы должны подтвердить, что электронное письмо было открыто на том же устройстве и является ссылкой для входа по электронной почте:
if (firebase.auth().currentUser amp;amp;
firebase.auth().currentUser.email === window.localStorage.getItem('emailForSignIn') amp;amp;
firebase.auth().isSignInWithEmailLink(window.location.href) amp;amp;
window.localStorage.getItem('linkId') === getLinkIdFromUrl()) {
// Complete sign-in and re-auth.
}
В случае повторной авторизации:
const credential = firebase.auth.EmailAuthProvider.credentialWithLink(
window.localStorage.getItem('emailForSignIn'),
window.location.href
);
user.reauthenticateAndRetrieveDataWithCredential(credential)
.then(function() {
return user.delete();
});