我正在Angular 7应用程序中使用Firebase,以便允许用户使用电子邮件/链接选项登录。
现在,我需要允许用户删除自己的帐户。
在允许用户删除帐户之前,我应该使用“凭据”对帐户进行重新验证。
要获得该凭证,我需要使用
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”参数的过程。 谢谢。
答案 0 :(得分:0)
Email link sign-in包含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
});
然后,您需要完成登录或使用页面https://www.example.com/finishSignUp
上包含OTP的链接重新进行身份验证。
您应确认电子邮件是在同一设备上打开的,并且是电子邮件登录链接:
if (firebase.auth().currentUser &&
firebase.auth().currentUser.email === window.localStorage.getItem('emailForSignIn') &&
firebase.auth().isSignInWithEmailLink(window.location.href) &&
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();
});