我正在为我的项目使用带有express的节点。一切工作正常,直到我尝试使用中间件获取收藏。
这是中间件:
const FBAuth = (req, res, next) => {
let idToken;
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
idToken = req.headers.authorization.split(' ')[1];
} else {
return res.status(403).json({ error: 'No Token' });
}
admin.auth().verifyIdToken(idToken)
.then(decodedToken => {
req.user = decodedToken;
console.log(decodedToken);
我在控制台上登录了idToken,似乎还可以。 我用控制台记录了encodedToken并得到了这个:
iss: 'https://securetoken.google.com/projectName',
> aud: 'projectName',
> auth_time: 1583062225,
> user_id: 'an ID',
> sub: 'same as user_id',
> iat: number...,
> exp: number...,
> email: 'testmd@email.com',
> email_verified: false,
> firebase: { identities: { email: [Array] }, sign_in_provider: 'password' },
> uid: 'same as user_id'
但是如果我尝试获取例如“用户”的集合(与firebase中的集合名称相同):
admin.auth().verifyIdToken(idToken)
.then(decodedToken => {
req.user = decodedToken;
console.log(decodedToken);
return db.collection("users")
.where('email', '==', req.user.email)
.limit(1)
.get()
})
.then(data => {
res.json(data)
})
无论我尝试获取什么集合或如何总是收到此错误:
UnhandledPromiseRejectionWarning:错误:无法加载默认凭据。浏览至https://cloud.google.com/docs/authentication/getting-started了解更多信息...
因此,我阅读了有关凭据的信息,我将其添加为:
var serviceAccount = require("./serviceAccountKey.json");
const config = {
...more configs
atabaseURL: "https://...",
credential: admin.credential.cert(serviceAccount),
projectId: "projecId",
...more config
}
firebase.initializeApp(config)
在serviceAccountKey.json中,我有在帐户服务标签中生成的从firebase获得的密钥。
添加凭据后仍然出现与上述相同的错误。
答案 0 :(得分:1)
您显示的代码称为:
firebase.initializeApp(config)
但是我们不知道firebase
是什么。我很确定这不是Firebase Admin SDK。我怀疑您应该使用admin
变量来初始化Admin SDK,该变量用于在exprss应用程序中查询数据库:
admin.initializeApp(config)