我不明白,为什么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 来绕过。
添加回答
举报
0/150
提交
取消