如何发送电子邮件以在Firebase的“ EmailAuthProvider.credentialWithLink()”中使用?

时间:2019-04-09 07:05:01

标签: angular firebase-authentication

我正在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”参数的过程。 谢谢。

1 个答案:

答案 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();
  });