使用NodeJS进行Firebase身份验证

Ale*_*ide 4 javascript node.js express firebase firebase-authentication

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

Fra*_*teo 16

Firebase身份验证主要在前端完成

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

但是,如果您需要执行一些特殊的身份验证,例如与LDAP/AD或其他一些企业恶作剧集成,那么您需要创建客户端SDK将用于对用户进行身份验证的自定义令牌创建.

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

这是需要自己实现的.流客户端会像:

  1. 用户执行auth客户端.
  2. 当用户尝试访问您的Express API时,您需要从localstorage您的API请求中检索令牌并将其发送.

假设您在请求标头上附加了令牌:FIREBASE_AUTH_TOKEN: abc.请参阅Firebase将存储在本地存储中的用户数据检索为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();
}
Run Code Online (Sandbox Code Playgroud)

然后你会像这样使用这个中间件:

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)
})
Run Code Online (Sandbox Code Playgroud)

我希望这可以让你知道该怎么做.我暂时没有使用Firebase,上面的信息是我从文档中收集到的信息.