到目前为止,我正在使用Mongodb和Express。我通过检查req.user
对象来完成整个身份验证。从我看到的情况来看,Firebase身份验证主要在前端完成。如何让req.user
在后端使用Firebase?我看到了几个tutorials,但他们只是展示了几种方法并继续。我的意思是要更多地了解逻辑,但一些代码示例可能会有所帮助。
答案 0 :(得分:11)
Firebase身份验证主要在前端进行
正确。使用Firebase提供的SDK时,用户身份验证完全在客户端完成。
但是,如果您需要进行一些特殊的身份验证,例如与LDAP / AD或其他一些企业恶作剧集成,那么您需要执行custom token creation客户端SDK用于对用户进行身份验证。
如何让
req.user
在后端使用Firebase?
你需要自己实施。流客户端会像:
localstorage
中设置身份验证状态。请参阅Authentication State Persistence
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,上面的信息是我从文档中收集到的信息。
答案 1 :(得分:0)
如果您计划仅设置服务器端会话,则应考虑使用Firebase会话Cookie:https://firebase.google.com/docs/auth/admin/manage-sessions。
有一个示例可以显示如何在https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions
使用httpOnly
Cookie