我正在使用Firebase,现在我正在Web中创建管理面板,管理员可以在其中从管理面板中删除,添加,修改用户。当我搜索时,我得到的是nodejs的sdk,而不是JavaScript的java。当我在JavaScript中尝试以下nodejs代码时,它给出了类似firebase.credential
的错误消息
admin.initializeApp({
credential: admin.credential.cert({
projectId: '<PROJECT_ID>',
clientEmail: 'client email id',
privateKey: '-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n'}),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});
答案 0 :(得分:3)
没有Admin SDK不能专门用于服务器端,因为它可以无限制地访问您的Firebase项目。切勿将管理员凭据放在前端。
您可以使用firebase https函数来实现所需的功能。在firebase函数上创建一个api,并将检查放在函数内部,以检查用户是否有权删除/添加/修改用户。
这里有一些资源可以帮助您入门:
Firebase功能:https://firebase.google.com/docs/functions/
HTTP函数:https://firebase.google.com/docs/functions/http-events
答案 1 :(得分:2)
“是否有用于JavaScript的firebase管理员sdk?”:
firebase的admin sdk目前仅适用于“ Node js”,但它使用javascript作为其语言。要对您的Firebase资源执行任何基于管理员的操作,请使用带有express的nodejs,它可以与Firebase托管一起很好地工作。
还可以查看 firebase功能:https://firebase.google.com/docs/functions/
在这里您可以找到一些预定义功能的预制功能,因此您不必自己编写代码。
答案 2 :(得分:1)
有一种方法。如果查看https://github.com/firebase/firebase-admin-node的源代码,您会发现它们使用admin-service-account.json文件中的oauth2凭据并获得令牌。 每个api调用都使用此令牌进行请求。 我最近做了此操作,以便可以在Flutter应用程序中从前端发送通知。这是飞镖中的一些旧代码。但这就是流程。
var response = await
http.post("https://accounts.google.com:443/o/oauth2/token",
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-
bearer&assertion=jot"
);
print("Response status: ${response.statusCode}");
print("Response body: ${response.body}");
var body = json.decode(response.body);
var token = body['access_token'];
print(token);
var response2 = await http.post("${Config.fcmUrl}/messages:send",
headers: {
"Content-Type": 'application/json',
"Sdk-Version": 'Node/Admin/<XXX_SDK_VERSION_XXX>',
'access_token_auth': 'true',
"Authorization": "Bearer $token",
},
body: json.encode({
"message": {
"topic": "live",
"notification": {
"body": "This is a Firebase Cloud Messaging Topic Message!",
"title": "FCM Message",
},
},
},
));
print("Response status: ${response2.statusCode}");
print("Response body: ${response2.body}");