在 firebase 函数中启用 CORS

Posted

技术标签:

【中文标题】在 firebase 函数中启用 CORS【英文标题】:Enabling CORS in firebase functions 【发布时间】:2020-07-04 15:19:53 【问题描述】:

我有以下代码:

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)\n`
    ))
    if (req.method === 'POST') 
      const mailOptions = 
        from: gmailEmail,
        replyTo: gmailEmail,
        to: mailto,
        subject: `Order $uuidv4() from $req.body.name ($req.body.email)`,
        text: `Order\n\n$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。

【问题讨论】:

在单独的语句中尝试这些?常量应用程序 = 快递(); const cors = 要求('cors'); app.use(cors( origin: true )); 【参考方案1】:

要使用 Firebase 在 Cloud Functions 上配置 CORS,您需要配置和设置一些附加参数 - 如官方文档 here 中所述 - 以便 CORS 在您的应用程序中通过 HTTP 获得授权和执行。

您需要在应用程序上配置的设置示例中的参数如下:

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的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase Cloud 功能中启用 Cors

错误:HTTP 错误 400,请求有错误。 Firebase Firestore 云函数

为 Firebase 云功能启用 Cors

在 Firebase 中启用持久性后实际会发生啥?

在 Android 中启用 Firebase 崩溃报告

如何在 Flutter 中启用/禁用 Firebase Crashlytics