【发布时间】: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