为了账号安全,请及时绑定邮箱和手机立即绑定

如何保护firebase云功能HTTP端点仅允许Firebase经过身份验证的用户?

如何保护firebase云功能HTTP端点仅允许Firebase经过身份验证的用户?

如何保护firebase云功能HTTP端点仅允许Firebase经过身份验证的用户?使用新的firebase云功能,我决定将我的一些HTTP端点移动到firebase。一切都很好......但我有以下问题。我有两个端点由HTTP触发器(云功能)构建用于创建用户并返回Firebase Admin SDK生成的自定义令牌的API端点。用于获取特定用户详细信息的API端点。虽然第一个端点很好,但对于我的第二个端点,我希望仅为经过身份验证的用户保护它。意思是拥有我之前生成的令牌的人。我该如何解决这个问题?我知道我们可以使用云函数获取Header参数request.get('x-myheader')但有没有办法保护端点就像保护实时数据库一样?
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

正如@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用来验证该令牌。您将在响应中获得该用户的已解码信息。否则,如果令牌无效,则会抛出错误。

我希望它有所帮助。


查看完整回答
反对 回复 2019-08-26
?
守候你守候我

TA贡献1802条经验 获得超10个赞

正如@Doug所提到的,您可以使用可调用函数来从客户端和服务器中排除一些样板代码。

Exampale可调用函数:

export const getData = functions.https.onCall((data, context) => {
  // verify Firebase Auth ID token
  if (!context.auth) {
    return { message: 'Authentication Required!', code: 401 };
  }
  // do your things..
  const uid = context.auth.uid;
  const query = data.query;
  return { message: 'Some Data', code: 400 };});

它可以直接从您的客户端调用,如下所示:

firebase.functions().httpsCallable('getData')({query}).then(result => console.log(result));


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 487 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信