【发布时间】:2017-07-04 07:31:13
【问题描述】:
目前我正在 nodejs 上创建一个 Firebase API。我想在 nodejs 上使用 firebase-admin 处理所有 Firebase 的东西(如身份验证)。但是,在 firebase-admin 没有客户端的 Javascript Firebase SDK 的情况下,通过 nodejs 对用户进行身份验证的正确方法是什么?在官方documentation for admin 上,我没有为nodejs 找到一个名为signInWithEmailAndPassword 的函数(就像在客户端SDK 上一样)。只有一个函数叫做:“getUserByEmail”,但是这个函数不会检查用户是否输入了正确的密码。
这是我的表格:
<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 SDK 使用 signInWithEmailAndPassword 登录并获取 uid。一旦我有了 UID,我想将 UID 发送到 nodejs 并调用函数 createCustomToken 并将生成的令牌(带有一些额外的声明)返回给客户端。取回令牌后,我将使用函数 signWithCustomToken (在客户端)对用户进行身份验证。这种方法正确还是有更好的方法?
【问题讨论】:
-
通常,用户在客户端进行身份验证。 Firebase 经过优化并设计为在客户端运行。无论如何,如果您坚持,您可以在您的服务器上使用客户端 node.js
require('firebase')库。这有你需要的客户端 APIsignInWithEmailAndPassword等。 -
是的,没错。我使用 firebase-admin 的原因是我可以向令牌添加自定义声明并将其发送回用户。但这是在 nodejs 中使用 firebase 模块进行身份验证并将令牌发回的好方法。谢谢!
标签: node.js authentication firebase-admin