到目前为止,我一直在使用MongoDB和Express。在那里,我的整个身份验证都是通过检查req. user
对象来完成的。据我所见,Firebase身份验证主要是在前端完成的。我如何让req.user
在后端使用Firebase?我看了几个教程,但它们只是展示了几个方法,然后继续。我的意思是询问更多关于逻辑的信息,但一些代码示例可能会有所帮助。
Firebase鉴权多在前端完成
正确。使用Firebase提供的SDK时,用户身份验证完全在客户端完成。
但是,如果您需要执行一些特殊的身份验证,例如与LDAP/AD集成或其他一些企业恶作剧,那么您将需要执行客户端SDK用于对用户进行身份验证的自定义令牌创建。
如何让req. user
在后端使用Firebase?
这是您需要自己实现的东西。流客户端将类似于:
localstore
中设置身份验证状态。请参阅身份验证状态持久性假设您将令牌附加在请求标头上:FIREBASE_AUTH_TOKEN: abc
。请参阅Firebase检索存储在本地存储中的用户数据,作为Firebase:autUser:
因此,在服务器端,使用Firebase AdminSDK,您将检索该令牌并通过valfyIdToken
对其进行验证。下面是中间件的快速脏例子:
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会话cookie:https://firebase.google.com/docs/auth/admin/manage-sessions.
有一个示例可以显示如何使用httpOnly
cookie:https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions