到目前为止,我正在与Mongodb和Express一起工作。在那里,我的整个身份验证是通过检查req.user
对象完成的。从我看到的结果来看,Firebase身份验证大部分是在前端完成的。如何在后端使用req.user
与Firebase配合使用?我看到了几个tutorials,但是他们只是展示了一些方法并继续。我的意思是询问更多有关逻辑的信息,但是一些代码示例可能会有所帮助。
最佳答案
正确的。使用Firebase提供的SDK时,用户身份验证完全在客户端进行。
但是,如果您需要执行一些特殊的身份验证,例如与LDAP/AD或其他企业级认证集成,则需要执行custom token creation,客户端SDK会使用Authentication State Persistence对用户进行身份验证。
这是您需要自己实现的。流客户端将类似于:
localstorage
中设置身份验证状态。参见Firebase retrieve the user data stored in local storage as firebase:authUser: localstorage
中检索 token ,并将其与您的API请求一起发送。 假设您将 token 附加在请求 header 上:
FIREBASE_AUTH_TOKEN: abc
。参见Firebase Admin SDK因此,在服务器端,使用
verifyIdToken
,您将检索该 token 并通过ojit_a对其进行验证。以下中间件的快速肮脏示例:const {auth} = require('firebase-admin');
const authService = auth();
exports.requiresAuth = async (req, res, next) => {
const idToken = req.header('FIREBASE_AUTH_TOKEN');
// https://firebase.google.com/docs/reference/admin/node/admin.auth.DecodedIdToken
let decodedIdToken;
try {
decodedIdToken = await authService.verifyIdToken(idToken);
} catch (error) {
next(error);
return;
}
req.user = decodedIdToken;
next();
}
然后,您将使用这种中间件,如下所示:
const express = require('express');
const router = express.Router();
const {requiresLogin} = require('./my-middleware.js');
router.get('/example', requiresLogin, async (req, res) => {
console.log(req.user)
})
我希望这会让您对应该做什么有所了解。我已经有一段时间没有使用Firebase了,上面的信息是我从查看文档中收集的。
关于javascript - 使用NodeJS进行Firebase身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50370925/