5 node.js firebase-authentication firebase-admin
这是我使用节点发出的请求
// Initialize the default app
var admin = require('firebase-admin');
var app = admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: process.env.FIREBASE_DATABASE
});
console.log(process.env.FIREBASE_DATABASE);
router.post('/', (req, res, next) => {
app.auth().getUserByEmail("j.100233260@gmail.com")
.then(function(userRecord) {
// See the UserRecord reference doc for the contents of userRecord.
console.log('Successfully fetched user data:', userRecord.toJSON());
res.json(userRecord.toJSON())
})
.catch(function(error) {
console.log('Error fetching user data:', error);
res.json(error)
});
}
);
Run Code Online (Sandbox Code Playgroud)
我在我的机器上设置了环境变量
对于我的 firebase 数据库,我使用了 env
给出为
databaseURL: "https://fssssss.firebaseio.com",
Run Code Online (Sandbox Code Playgroud)
从 Firebase 管理 GUI 中,
当我请求这条路线时邮递员中的错误
{
"code": "app/invalid-credential",
"message": "Failed to determine project ID: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal metadata.google.internal:80. Error code: ENOTFOUND"
}
Run Code Online (Sandbox Code Playgroud)
我按照文档进行操作,谷歌没有返回任何结果,不知道该怎么办。谢谢。
小智 10
const firebase_admin = require('firebase-admin');
const admin = firebase_admin.initializeApp({
credential: firebase_admin.credential.applicationDefault()
});
Run Code Online (Sandbox Code Playgroud)
然后像这样运行应用程序:
GOOGLE_APPLICATION_CREDENTIALS=/path/to/yourserviceaccountkey.json node index.js
Run Code Online (Sandbox Code Playgroud)
或者通过 package.json 脚本:
"start" : "GOOGLE_APPLICATION_CREDENTIALS=/path/to/yourserviceaccountkey.json node index.js"
Run Code Online (Sandbox Code Playgroud)
您还可以在运行 Node 之前在终端会话中设置环境变量,如下所示:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Run Code Online (Sandbox Code Playgroud)
只需传递您的服务帐户密钥的路径
const firebase_admin = require('firebase-admin');
const serviceAccount = require("/path/to/yourserviceaccountkey.json");
const admin = firebase_admin.initializeApp({
credential: firebase_admin.credential.cert(serviceAccount);
});
Run Code Online (Sandbox Code Playgroud)
参考
这没有按您期望的方式工作:
admin.credential.applicationDefault()
Run Code Online (Sandbox Code Playgroud)
如果没有额外的配置,您无法在您控制的服务器上使用它。仅当您要在项目中使用默认服务帐户时,这仅在 Google 服务上运行时才有效。在您自己的服务器上运行时,没有默认值。您必须明确并下载服务帐户凭据以在初始化期间使用。至少,您需要遵循文档中的说明:
要对服务帐户进行身份验证并授权其访问 Firebase 服务,您必须生成 JSON 格式的私钥文件。
要为您的服务帐户生成私钥文件:
- 在 Firebase 控制台中,打开设置 > 服务帐户。
- 单击“生成新私钥”,然后单击“生成密钥”进行确认。
- 安全地存储包含密钥的 JSON 文件。
通过服务帐户授权时,您有两种选择向应用程序提供凭据。您可以设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量,也可以在代码中显式传递服务帐户密钥的路径。第一个选项更安全,强烈推荐。
因此,您需要下载服务帐户文件,正确设置 GOOGLE_APPLICATION_CREDENTIALS,然后您的代码才能工作。服务帐户凭据不是可选的。
归档时间: |
|
查看次数: |
17406 次 |
最近记录: |