使用NodeJS进行Firebase身份验证

时间:2018-05-16 12:26:08

标签: javascript node.js firebase express firebase-authentication

到目前为止,我正在使用Mongodb和Express。我通过检查req.user对象来完成整个身份验证。从我看到的情况来看,Firebase身份验证主要在前端完成。如何让req.user在后​​端使用Firebase?我看到了几个tutorials,但他们只是展示了几种方法并继续。我的意思是要更多地了解逻辑,但一些代码示例可能会有所帮助。

2 个答案:

答案 0 :(得分:11)

  

Firebase身份验证主要在前端进行

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

但是,如果您需要进行一些特殊的身份验证,例如与LDAP / AD或其他一些企业恶作剧集成,那么您需要执行custom token creation客户端SDK用于对用户进行身份验证。

  

如何让req.user在后​​端使用Firebase?

需要自己实施。流客户端会像:

  1. 用户执行auth客户端。
  2. 当用户尝试访问您的Express API时,您需要从localstorage检索令牌并将其与您的API请求一起发送。
  3. 我们假设您在请求标头上附加了令牌:FIREBASE_AUTH_TOKEN: abc。见Firebase retrieve the user data stored in local storage as firebase:authUser:

    因此,在服务器端,使用Firebase Admin SDK,您将检索该令牌并通过verifyIdToken进行验证。中间件下面的快速脏示例:

    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,上面的信息是我从文档中收集到的信息。

答案 1 :(得分:0)

如果您计划仅设置服务器端会话,则应考虑使用Firebase会话Cookie:https://firebase.google.com/docs/auth/admin/manage-sessions

有一个示例可以显示如何在https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions

使用httpOnly Cookie