如何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做很多非常有趣的事情。
希望它以某种方式帮助。
- node.js传递身份validation状态
- SPA(angular度)身份validation与OAuth2提供商的独立域上的API和身份validation服务器; Google,Facebook
- 如何从第三方node.js服务器validationGame Center用户
- 使用本地策略进行身份validation时,Passportjs引发500服务器错误
- 在passportjs响应之前的Expressjs / Change header
- 使用passport.js将本地策略连接到另一个(Facebook,Twitter,Google等)
- validationcaptcha以及passport.js
- 为什么我会连接错误尝试连接到mongo
- 路由器中的Hapijs会话