在firebase函数中启用CORS
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在firebase函数中启用CORS相关的知识,希望对你有一定的参考价值。
我有以下代码:
const { v4: uuidv4 } = require('uuid')
const functions = require('firebase-functions')
const nodemailer = require('nodemailer')
const cors = require('cors')({ origin: true })
const gmailEmail = functions.config().gmail.email
const gmailPassword = functions.config().gmail.password
const mailto = functions.config().gmail.mailto
const mailTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: gmailEmail,
pass: gmailPassword
}
})
exports.sendMail = functions.https.onRequest((req, res) => {
cors(req, res, () => {
const items = req.body.items.forEach(item => (
`${item.quantity} x ${item.uuid} (${item.name})
`
))
if (req.method === 'POST') {
const mailOptions = {
from: gmailEmail,
replyTo: gmailEmail,
to: mailto,
subject: `Order ${uuidv4()} from ${req.body.name} (${req.body.email})`,
text: `Order
${items}`
}
mailTransport.sendMail(mailOptions)
res.status(200).send(JSON.stringify({ status: 'OK' }))
} else {
res.status(400).send(JSON.stringify({ status: 'method not allowed' }))
}
})
})
由于某种原因,它曾经工作过一次,然后一直给我
Access to fetch at 'https://xxxxx.cloudfunctions.net/sendMail' from origin 'https://xxxx.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
我想念的是什么?如果可能的话,我想避免使用Express。
答案
为了使用Firebase在Cloud Functions上配置CORS,您需要配置和设置一些其他参数-如官方文档here中所述-要在应用程序中通过HTTP授权和执行CORS。
您需要在应用程序上配置的设置示例中的参数如下:
const express = require('express');
const cors = require('cors')({origin: true});
const app = express();
app.use(cors({ origin: true }));
我建议您尝试使用以上设置来尝试在后端进行授权。
此外,以下来自社区的问题,还有一些其他解决方案和与您的问题类似的用例,我认为它们可以帮助您实现配置,并且我认为您也应该进行检查。
- Enabling CORS in Cloud Functions for Firebase
- Enable CORS while an XMLHttpRequest error occurs in flutter web
让我知道信息是否对您有所帮助!
以上是关于在firebase函数中启用CORS的主要内容,如果未能解决你的问题,请参考以下文章