猿问

为什么 sendSignInLinkToEmail(email, settings)

我不明白,为什么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;

    }

},


慕容3067478
浏览 237回答 1
1回答

qq_遁去的一_1

使用电子邮件链接登录也适用于新的电子邮件帐户。这些帐户不需要已经存在。如果您想阻止电子邮件发送,您可以事先检查该帐户是否存在:firebase.auth().fetchSignInMethodsForEmail(email).then((signInMethods) => {  if (signInMethods.length === 0) {    // New user.  } else {    // Existing user.  }});但是,以上只是客户端强制执行的,因此用户可以通过调用 REST API 来绕过。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答