繁体   English   中英

Firebase 授权不记名令牌未注册

[英]Firebase authorization bearer token not registering

错误消息:没有 Firebase ID 令牌在授权 header 中作为不记名令牌传递。 确保您通过提供以下 HTTP header: Authorizaiton: Bearer 或通过传递“__session”cookie 来授权您的请求

实际上有一个有效的令牌。 相同的设置适用于其他功能,但不适用于此处。 主要区别在于这是删除而不是帖子。

    firebase
      .auth()
      .currentUser.getIdToken(true)
      .then((token) => {
        console.log(token)
        return axios.delete(
          `${FunctionsDir}/deleteMessage`,
          {
            messageID: messageID,
          },
          {
            headers: {
              Authorization: `Bearer ${token}`,
              'content-type': 'application/octet-stream',
            },
          }
        )
      })

和 cors 设置...

var corsOptions = {
  origin: function (origin, callback) {
    if (whitelist.indexOf(origin) !== -1 || !origin) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  },
  allowedHeaders: 'Content-Type,Authorization',
  methods: 'GET,POST,DELETE',
  preflightContinue: false,
  optionsSuccessStatus: 200,
}

app.options('*', cors())
app.use(cors(corsOptions))

更新:已修复,原来是 cors 东西加上 axios.delete() sig 是错误的。

这可能是需要在服务器上解决的CORS问题。

这是因为 DELETE 请求需要向服务器发出飞行前请求,询问可以发送的内容。 因为您收到了服务器的响应,很可能您已经在Access-Control-Allow-Methods header 中添加了DELETE 但是,默认情况下, Authorization不被视为“安全标头”。 因此,您还必须明确允许它,否则浏览器会在发送请求时将其从请求中删除。 您可以通过向Access-Control-Allow-Headers header 添加Authorization来完成此操作。

如果您在服务器上使用 Express,您可以允许cors package 为您执行此操作:

import express from "express";
import cors from "cors";

const app = express();
app.options("/deleteMessage", cors()); // enable preflight request for DELETE
app.use(cors({ origin: ["https://yourapp.com"] })); // enable CORS for all routes

// ...

如果您不喜欢使用第三方依赖项,您可以手动添加标题,如this answer所示。

对于非快速请求,例如 HTTP 请求云 Function,您可以使用以下代码:

import express from "express";
import cors from "cors";

const corsMiddleware = cors({ origin: ["https://yourapp.com"] }); // or your manual (req, res, next) function

export const someFunction = functions.https.onRequest((req, res) => {
  corsMiddleware(req, res, (err) => {
    if (err) {
      res.status(500).send('CORS check failed');
      return;
    }

    // your code here
  }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM