javascript 在Firebase中通过sendSignInLinkToMail方法发送时如何创建一次性过期电子邮件链接

13z8s7eq  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(112)

我想邀请新用户在我的React应用程序与Firebase电子邮件方法
我已经实现了这个方法和它的工作,因为我预期的用户也得到了电子邮件从firebase当我邀请从React应用程序作为一个管理员帐户
此函数用于通过sendSignInLinkToEmail方法向新用户发送邮件

ISSUE:用户使用后链接未过期

预期:链接必须是第一次活动,而不是多次
即使我添加了singleUse: trueoneTimeCode: true,这个属性也没有效果
功能

const sendLoginLink = (email) => {
    const actionCodeSettings = {
      url:
        "http://localhost:3000/auth/sign-up?email=" + encodeURIComponent(email),
      handleCodeInApp: true,
      // Expire the link after first use
      // This is achieved by setting the singleUse and oneTimeCode options to true
      singleUse: true,
      oneTimeCode: true,
      dynamicLinkDomain: "my email",
      // Set the email subject
      // This is optional
      emailSubject: "invitation from my app",
      // Set the email body
      // This is optional
      emailBody: "please click the this link to sign up into the account",
    };

    firebase
      .auth()
      .sendSignInLinkToEmail(email, actionCodeSettings)
      .then(() => {
        // The link was successfully sent
        console.log("link send successfully");
      })
      .catch((error) => {
        // Handle the error
        console.log(`link send unsuccessfully ${error}`);
      });
  };

请我已经尝试了这么多的方法,但它不到期,有人能告诉我如何做到这一点吗
任何帮助都是如此的感激

3qpi33ja

3qpi33ja1#

您能指定正在使用的Firebase NPM包及其版本吗?
我在文档中找不到singleUseoneTimeCode参数。
默认情况下,对于v.9 Firebase,链接仅供一次性使用。
对于前端JS,请尝试:

import { initializeApp } from 'firebase/app';
import { getAuth, sendSignInLinkToEmail } from "firebase/auth";

const firebaseConfig = { /*...*/ };
const firebaseApp = initializeApp(firebaseConfig);
const auth = getAuth(firebaseApp);

const sendLoginLink = (email) => {
    const actionCodeSettings = {
      url:
        "http://localhost:3000/auth/sign-up?email=" + encodeURIComponent(email),
      handleCodeInApp: true,      
      dynamicLinkDomain: "my email",
    };

    sendSignInLinkToEmail(auth, email, actionCodeSettings)
      .then(() => {
    
       // ...
      })
      .catch((error) => {
       // ...
     });
  };

对于NodeJS后端,它将是类似的,除了:

import { initializeApp } from 'firebase-admin/app';
import { getAuth } from 'firebase-admin/auth';

//...

auth.generateSignInWithEmailLink(email, actionCodeSettings).then(/*etc*/)

相关问题