到目前为止,我一直在使用 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?
这是您需要自己实现的。流程客户端会是这样的:
- 用户在客户端执行身份验证。
- Firebase 将默认在
localstorage
中设置身份验证状态。参见 Authentication State Persistence
- Firebase 将默认在
- 当用户尝试访问您的 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/