在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 }));

我建议您尝试使用以上设置来尝试在后端进行授权。

此外,以下来自社区的问题,还有一些其他解决方案和与您的问题类似的用例,我认为它们可以帮助您实现配置,并且我认为您也应该进行检查。

让我知道信息是否对您有所帮助!

以上是关于在firebase函数中启用CORS的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase Cloud 功能中启用 Cors

为 Firebase 云功能启用 Cors

Firebase 可调用函数 + CORS

Firebase可调用函数+ CORS

未为 Firebase 云功能启用 Cors

如何使用 NestJs 在 firebase 函数中激活 CORS