Javascript 如何在用户每次登录firebase时发送通知邮件?

Javascript 如何在用户每次登录firebase时发送通知邮件?,javascript,reactjs,firebase,firebase-authentication,Javascript,Reactjs,Firebase,Firebase Authentication,我试图在用户每次登录react应用程序时发送通知邮件(或任何介质)。目前,我正在使用 Firebase.auth().onAuthStateChanged(async(userData) => { if (userData) { const sendMail = await api.sendMail(userData.email); } } 但问题是,每次我刷新应用程序时,它都会调用sendMail API。 所以我想我会在点击登录按钮时这样做,但问题是它是一个社交登录。

我试图在用户每次登录react应用程序时发送通知邮件(或任何介质)。目前,我正在使用

Firebase.auth().onAuthStateChanged(async(userData) => {
  if (userData) {
    const sendMail = await api.sendMail(userData.email);
  }
}
但问题是,每次我刷新应用程序时,它都会调用sendMail API。 所以我想我会在点击登录按钮时这样做,但问题是它是一个社交登录。 我正在使用
signInWithRedirect
Firebase.auth().signInWithRedirect(facebookProvider)。
在这种情况下,我没有我的应用程序的过去状态。

是否有任何方法可以通过重定向进行此登录?

您不希望触发此操作,因为正如您所指出的,这将在用户的登录状态更改时发送电子邮件

由于您正在使用Facebook对用户进行身份验证,因此您需要了解Firebase用户可用的身份验证事件和方法。在这种情况下,如果使用
signInWithRedirect
,则应在或
getRedirectResult
期间触发电子邮件

使用带有弹出窗口的
符号的示例:

firebase.auth().signInWithPopup(provider).then(async result => {
    const user = result.user;
    const sendMail = await api.sendMail(user.email);
}).catch(function(error) {
    // Handle Errors here.
});
使用带有重定向的
符号的示例:

firebase.auth().getRedirectResult().then(async result => {
    if (result.credential) {
        const user = result.user;
        const sendMail = await api.sendMail(user.email);
    }
}).catch(function(error) {
    // Handle Errors here.
});

非常感谢你回来。但是不可能使用重定向的
符号来执行此操作
?这是完美的。我不知道
getRedirectResult
。谢谢需要澄清的是,getRedirectResult在authStateChanged中使用它并不是一个坏做法?有最佳实践吗
Firebase.auth().onAuthStateChanged(异步(userData)=>{const result=Wait Firebase.auth().getRedirectResult();如果(result.credential){const user=result.user;console.log(user);}
No不要把它放在那里。最好把它放在
componentDidMount()中
因为用户将被重定向回您的站点。