Firebase 授权不记名令牌未注册
Posted
技术标签:
【中文标题】Firebase 授权不记名令牌未注册【英文标题】:Firebase authorization bearer token not registering 【发布时间】:2021-06-27 21:33:21 【问题描述】:错误消息:没有 Firebase ID 令牌作为授权标头中的不记名令牌传递。确保通过提供以下 HTTP 标头来授权您的请求: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 配置存在问题。 添加了 CORS 配置。 您也应该在注入cors
中间件的位置发布 - 了解它的使用方式很重要。例如通常app.options("*", cors())
或app.options("/deleteMessage", cors())
必须存在。
【参考方案1】:
这可能是一个CORS 问题,需要在服务器上解决。
这是因为 DELETE 请求需要向服务器发出飞行前请求,询问可以发送的内容。因为您收到了来自服务器的响应,所以很可能您已经将 DELETE
添加到了 Access-Control-Allow-Methods
标头中。但是,Authorization
默认情况下不被视为“安全标头”。因此,您还必须明确允许它,否则浏览器会在发送请求时将其从请求中删除。您可以通过将Authorization
添加到您的Access-Control-Allow-Headers
标头来做到这一点。
如果您在服务器上使用 Express,您可以允许 cors
包为您执行此操作:
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 请求云函数,您可以使用以下代码:
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
)
【讨论】:
以上是关于Firebase 授权不记名令牌未注册的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 注册令牌未显示在 Android Studio logcat 中
未知状态码:17028 已通过安全网令牌,但未注册匹配的 SHA-256