为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 sendSignInLinkToEmail(email, settings)

为什么 sendSignInLinkToEmail(email, settings)

慕容3067478 2021-12-12 11:04:24
我不明白,为什么firebase.auth().sendSignInLinkToEmail(email, settings)要向尚未注册的电子邮件地址发送登录电子邮件。此外,当我然后单击链接,打开我检查电子邮件的站点时firebase.auth().signInWithEmailLink(email, signInEmailLink),电子邮件被注册并且用户已登录!我认为那是古玩,因为我已经建立了一个单独的注册流程。我希望当我firebase.auth().sendSignInLinkToEmail(email, settings)使用未注册的电子邮件拨打电话时会收到错误消息。我究竟做错了什么?这是我发送电子邮件并在用户单击链接时登录的代码。async login(email) {    try {        const settings = {            handleCodeInApp: true,            url: encodeURI(`${location.protocol}//${location.host}/#!/user/verifizieren`),        };        await firebase.auth().sendSignInLinkToEmail(email, settings);        window.localStorage.setItem(storageKeyEmail, email);    } catch(error) {        console.error(error);        throw error;    }},async verify(email, link) {    const signInEmailLink = link || window.location.href;    if(!firebase.auth().isSignInWithEmailLink(signInEmailLink)) {        return Promise.reject('auth/link-invalid');    }    try {        await firebase.auth().signInWithEmailLink(email, signInEmailLink);        firebase.auth().currentUser.reload();        firebase.auth().currentUser.getIdToken(true);        window.localStorage.removeItem(storageKeyEmail);    } catch(error) {        console.error(error);        throw error;    }},
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

使用电子邮件链接登录也适用于新的电子邮件帐户。这些帐户不需要已经存在。如果您想阻止电子邮件发送,您可以事先检查该帐户是否存在:


firebase.auth().fetchSignInMethodsForEmail(email).then((signInMethods) => {

  if (signInMethods.length === 0) {

    // New user.

  } else {

    // Existing user.

  }

});

但是,以上只是客户端强制执行的,因此用户可以通过调用 REST API 来绕过。


查看完整回答
反对 回复 2021-12-12
  • 1 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信