【问题标题】:Firebase authentication using NodeJS使用 NodeJS 的 Firebase 身份验证
【发布时间】:2018-10-26 12:15:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    假设您在请求标头上附加了令牌: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 了,上面的信息是我通过查看文档收集到的。

    【讨论】:

    • 好的。似乎按照创作者的意图使用本地存储会更容易。无论如何,感谢您的所有工作!
    • 只是一个随机的想法。既然从我所看到的 Firebase 几乎可以在前端做所有事情,那么将它与 Angular 一起使用不是更好吗?
    • “更好”是主观的。您可以使用完成工作所需的任何工具。
    • @AlexIronside 您意识到,如果您在客户端执行此类操作,您的应用程序中就会出现严重的安全问题。
    • 我最终使用了 React 并通过firebase.auth()检查用户
    【解决方案2】:

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

    有一个示例来展示如何使用httpOnly cookie,网址为:https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2019-02-10
      • 2019-06-22
      • 2017-10-14
      • 2014-10-07
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2016-09-26
      相关资源
      最近更新 更多