到目前为止,我正在与Mongodb和Express一起工作。在那里,我的整个身份验证是通过检查req.user对象完成的。从我看到的结果来看,Firebase身份验证大部分是在前端完成的。如何在后端使用req.user与Firebase配合使用?我看到了几个tutorials,但是他们只是展示了一些方法并继续。我的意思是询问更多有关逻辑的信息,但是一些代码示例可能会有所帮助。

最佳答案



正确的。使用Firebase提供的SDK时,用户身份验证完全在客户端进行。

但是,如果您需要执行一些特殊的身份验证,例如与LDAP/AD或其他企业级认证集成,则需要执行custom token creation,客户端SDK会使用Authentication State Persistence对用户进行身份验证。



这是您需要自己实现的。流客户端将类似于:

  • 用户执行auth客户端。
  • Firebase默认将在localstorage中设置身份验证状态。参见Firebase retrieve the user data stored in local storage as firebase:authUser:
  • 当用户尝试访问您的Express API时,您将需要从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/

    10-11 23:13
    查看更多