如何validationnodejs中的firebase-admin用户?

目前,我正在为nodejs创build一个Firebase API。 我想用nodejs上的firebase-admin处理所有Firebase的东西(如身份validation)。 但是,如果在客户端没有使用Javascript Firebase SDK的firebase-admin中通过nodejsvalidation用户身份的正确方法是什么? 在pipe理员的官方文档,我没有find一个名为signInWithEmailAndPassword (如在客户端SDK)的函数nodejs。 只有一个叫做“ getUserByEmail ”的函数,但是这个函数并不检查用户是否input了正确的密码。

这是我的forms:

<form class="sign-box" action="/login" method="post"> <div class="form-group"> <input id="username" name="username" type="text" class="form-control" placeholder="E-Mail"/> </div> <div class="form-group"> <input id="password" name="password" type="password" class="form-control" placeholder="Password"/> </div> <button type="submit" class="btn btn-rounded">Sign in</button> </form> 

一旦提交表单,我将这些值传递给nodejs中的API:

 app.post('/login', urlencodedParser, function (req, res) { // getting the values response = { username: req.body.username, password: req.body.password }; // authenticate the user here, but how ? }); 

我的第一个想法是使用客户端上的Firebase SDKloginsignInWithEmailAndPassword并获取uid。 一旦我有UID,我想将UID发送到nodejs,并调用函数createCustomToken,并将生成的令牌(带有一些额外的声明)返回给客户端。 一旦我得到令牌,我会使用函数signWithCustomToken (在客户端)来validation用户。 这是正确的还是有更好的办法?

实际上,对于身份validation,您将需要使用firebase的常规API,不需要pipe理员。

首先这会给你一个刷新的firebase令牌,而不是一个自定义的令牌。 如果你喜欢,你可以做同样的事情来获得一个自定义的令牌,如果你需要一个自定义的令牌,我也有一个例子。

npm安装firebase – 保存

 const firebase = require("firebase"); const config = { apiKey: "", authDomain: "", databaseURL: "", projectId: "", storageBucket: "", messagingSenderId: "" }; firebase.initializeApp(config); 

我发布了我的loginFirebasefunction,但您可以将其更改为易于expression。

 exports.login = functions.https.onRequest((req, rsp)=>{ const email = req.body.email; const password = req.body.password; const key = req.body.key; const _key = '_my_key_'; let token = ''; if(key === _key){ firebase.auth().signInWithEmailAndPassword(email,password).then((user)=>{ //The promise sends me a user object, now I get the token, and refresh it by sending true (obviously another promise) user.getIdToken(true).then((token)=>{ rsp.writeHead(200, {"Content-Type": "application/json"}); rsp.end(JSON.stringify({token:token})); }).catch((err)=>{ rsp.writeHead(500, {"Content-Type": "application/json"}); rsp.end(JSON.stringify({error:err})); }); }).catch((err)=>{ rsp.writeHead(500, {"Content-Type": "application/json"}); rsp.end(JSON.stringify({error:err})); }); } else { rsp.writeHead(500, {"Content-Type": "application/json"}); rsp.end(JSON.stringify('error - no key')); } }); 

注:我正在使用这个loginfunction来testing我的邮递员的其他function,所以这就是为什么我发送密钥,所以我可以私下使用这个。

现在结合ADMIN和FIREBASE节点apy,我可以在我的firebase上使用HTTPfunction做很多非常有趣的事情。

希望它以某种方式帮助。