【问题标题】:Firebase email function not finding userFirebase 电子邮件功能找不到用户
【发布时间】:2021-10-05 13:17:25
【问题描述】:

我的网站上有一个联系表单,在发送点击提交后,它会运行一个 firebase 函数来执行请求。我突然遇到的问题是以下错误(取自 firebase 日志)

Error: There is no user record corresponding to the provided identifier.
    at FirebaseAuthError.FirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:42:28)
    at FirebaseAuthError.PrefixedFirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:88:28)
    at new FirebaseAuthError (/workspace/node_modules/firebase-admin/lib/utils/error.js:147:16)
    at /workspace/node_modules/firebase-admin/lib/auth/auth-api-request.js:513:15
    at /workspace/node_modules/firebase-admin/lib/auth/auth-api-request.js:1347:13
    at process._tickCallback (internal/process/next_tick.js:68:7)

负责发送的函数如下:

    sendRequest() {
      this.loading = true
      return new Promise(resolve => {
        const newUrl = `https://us-central1-easymediakit.cloudfunctions.net/contactForm?name=${
          this.form.name
        }&email=${this.form.email}&message=${encodeURI(
          this.form.message
        )}&uid=${this.uid}`
        fetch(`${newUrl}`, {
          withCredentials: true,
          headers: {
            'Content-Type': 'application/json'
          }
        })
          .then(() => {})
          .then(async response => {
            this.loading = false
            this.success = 'Your email has been sent.'
            resolve(response)
          })
      }).catch(error => {
        this.loading = false
        console.log('Send error', error)
      })
    }

它工作正常,我没有对处理电子邮件发送的函数进行任何更改,所以我不确定问题出在哪里,非常感谢任何指导。

更新:

在 index.js 中

const contactFormModule = require('./email/email-contact-form')

exports.contactForm = functions.https.onRequest((req, res) => {
  return contactFormModule.handler(req, res)

联系表格:

const cors = require('cors')({ origin: true })
const domain = 'mg.epkbuilder.com'
const apiKey = 'f27b2755b05f3a366542ea538a00c6a2-d32d817f-dec22e2e'
const mailgun = require('mailgun-js')({ apiKey, domain })
const admin = require('firebase-admin')
const MailComposer = require('nodemailer/lib/mail-composer')

exports.handler = (req, res) => {
  cors(req, res, async () => {
    const uid = req.query.uid
    const name = req.query.name
    const email = req.query.email
    const message = req.query.message

    console.log('uid', uid)

    console.log('message', `${message}`)

    const user = await admin.auth().getUser(uid)

    console.log('user', user)

    const mailOptions = {
      from: `${name} noreply@easymediakit.io`,
      replyTo: `${name} ${email}`,
      to: user.email,
      subject: `Direct message from ${name}`,
      text: `${message}`
    }

    let mail = new MailComposer(mailOptions).compile()

    console.log('mail', mail)

    return mail.build((error, message) => {
      if (error) {
        console.log('Email unsuccessful', error)
        res.status(400).send(error)
      }
      const dataToSend = {
        to: user.email,
        message: message.toString('ascii')
      }
      return mailgun.messages().sendMime(dataToSend, sendError => {
        if (sendError) {
          console.log('Email unsuccessful', error)
          res.status(400).send(error)
        }
        return res.send('Email successfully sent!')
      })
    })
  })
}

【问题讨论】:

  • 我在您共享的调用 Auth API 的代码中看不到任何内容,因此我不确定错误是否来自此代码。如果这是来自 Cloud Function,您也可以共享该代码吗?
  • 我继续更新了帖子,我对 firebase 函数很陌生,我也没有编写这段代码,所以对我来说很困惑。我添加的新代码是您所指的吗?感谢您的帮助!

标签: node.js vue.js firebase-authentication google-cloud-functions


【解决方案1】:

错误似乎来自这一行:

const user = await admin.auth().getUser(uid)

该错误表明对于您指定的 uid 值,Firebase 身份验证中不存在任何用户。您可能需要在客户端代码中仔细检查 )}&uid=${this.uid} 中的 this.uid 值。

【讨论】:

  • 好吧,这是有道理的,有点困惑的是,联系表格只是标题、电子邮件和内容的输入。在这个过程中什么时候需要身份验证?用户无需登录即可使用联系表格。再次感谢,这很有帮助。
猜你喜欢
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 2018-11-15
相关资源
最近更新 更多