Ale*_*ide 4 javascript node.js express firebase firebase-authentication
到目前为止,我正在使用Mongodb和Express.我的整个身份验证是通过检查req.user对象完成的.从我看到的情况来看,Firebase身份验证主要在前端完成.如何req.user在后端使用Firebase?我看了几个教程,但他们只展示了几种方法并继续.我的意思是要更多地了解逻辑,但一些代码示例可能会有所帮助.
Fra*_*teo 16
Firebase身份验证主要在前端完成
正确.使用Firebase提供的SDK时,用户身份验证完全在客户端完成.
但是,如果您需要执行一些特殊的身份验证,例如与LDAP/AD或其他一些企业恶作剧集成,那么您需要创建客户端SDK将用于对用户进行身份验证的自定义令牌创建.
如何
req.user在后端使用Firebase?
这是您需要自己实现的.流客户端会像:
localstorage默认情况下,Firebase会将auth状态设置为.请参阅身份验证状态持久性
localstorage您的API请求中检索令牌并将其发送.假设您在请求标头上附加了令牌:FIREBASE_AUTH_TOKEN: abc.请参阅Firebase将存储在本地存储中的用户数据检索为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();
}
Run Code Online (Sandbox Code Playgroud)
然后你会像这样使用这个中间件:
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)
})
Run Code Online (Sandbox Code Playgroud)
我希望这可以让你知道该怎么做.我暂时没有使用Firebase,上面的信息是我从文档中收集到的信息.