作者:huo斌_340 | 来源:互联网 | 2023-02-09 11:23
使用新的firebase云功能,我决定将我的一些HTTP端点移动到firebase.一切都很好......但我有以下问题.我有两个端点由HTTP触发器(云功能)构建
用于创建用户并返回Firebase Admin SDK生成的自定义令牌的API端点.
用于获取特定用户详细信息的API端点.
虽然第一个端点很好,但对于我的第二个端点,我希望仅为经过身份验证的用户保护它.意思是拥有我之前生成的令牌的人.
我该如何解决这个问题?
我知道我们可以使用云函数获取Header参数
request.get('x-myheader')
但有没有办法保护端点就像保护实时数据库一样?
1> Doug Stevens..:
您正在尝试执行的操作有一个官方代码示例.它说明了如何设置HTTPS功能以要求Authorization标头包含客户端在身份验证期间收到的令牌.该函数使用firebase-admin库来验证令牌.
此外,如果您的应用程序能够使用Firebase客户端库,您可以使用" 可调用函数 "使这个样板更容易.
2> Will..:
正如@Doug所提到的,您可以firebase-admin
用来验证令牌.我已经建立了一个简单的例子:
exports.auth = functions.https.onRequest((req, res) => {
cors(req, res, () => {
const tokenId = req.get('Authorization').split('Bearer ')[1];
return admin.auth().verifyIdToken(tokenId)
.then((decoded) => res.status(200).send(decoded))
.catch((err) => res.status(401).send(err));
});
});
在上面的例子中,我也启用了CORS,但这是可选的.首先,你得到Authorization
标题并找出答案token
.
然后,您可以firebase-admin
用来验证该令牌.您将在响应中获得该用户的已解码信息.否则,如果令牌无效,则会抛出错误.
我希望它有所帮助.
Upvoted因为它很简单,并且不依赖于像官方例子那样的表达.
你能解释一下关于这些人的更多信息吗?
@RezaRahmati您可以在客户端使用`getIdToken()`方法(例如firebase.auth()。currentUser.getIdToken()。then(token => console.log(token))`)[firebase docs]( https://firebase.google.com/docs/reference/js/firebase.User#getIdToken)