javascript - 使用 NodeJS 的 Firebase 身份验证

标签 javascript node.js firebase express firebase-authentication

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

最佳答案

Firebase authentication is mostly done in the front end

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

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

How can I get req.user to work with Firebase in the back end?

这是需要自己实现的。流程客户端会是这样的:

  1. 用户在客户端执行身份验证。
  2. 当用户尝试访问您的 Express API 时,您需要从 localstorage 检索 token 并将其与您的 API 请求一起发送。

假设您在请求 header 上附加了 token :FIREBASE_AUTH_TOKEN: abc。参见 Firebase retrieve the user data stored in local storage as firebase:authUser:

所以在服务器端,使用Firebase Admin SDK ,您将检索该 token 并通过 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,上面的信息是我通过查看文档收集的。

关于javascript - 使用 NodeJS 的 Firebase 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50370925/

相关文章:

mysql - 关联关联 : include entity in JSON response

firebase - redux-firestore 监听器错误 : FirebaseError: Missing or insufficient permissions.?

android - Firebase runTransaction 不工作 - MutableData 为空

swift - 点击特定行时如何从 Firestore 获取特定信息

javascript - 在您的 Ebay 列表中使用 JavaScript/JSON 将用户选择的选项发回给您

javascript - jQuery 脚本的正确顺序?隐藏/显示功能在实时版本中不起作用,但可以作为独立的 fiddle 使用

javascript - 如何在 JavaScript 中同步运行函数?

javascript - youtube.playlistItems.insert(..) 花费大量配额

javascript - 有没有什么好的方法可以在rest api中传递错误对象

javascript - express 或 express 发电机 : do i need both?