【发布时间】:2020-08-01 11:06:54
【问题描述】:
基本上我的问题是,我在 Firebase 上有我的可调用函数,我想使用“上下文”来识别用户是否经过身份验证。在前端,我使用 Firebase 身份验证(这是 firebase 上的 http 函数)登录用户,结果我得到了我的用户令牌(应该用作授权标头中的 Bearer 令牌)。问题是当我登录用户时我不确定如何设置标题,以便我的“context.auth”将包含登录的用户信息而不是空的。我使用firebase.functions().httpsCallable('myFunction');,因为文档建议从出现问题的前端进行调用,即使我在进行此调用之前已登录,但我的上下文为空。
为了提供更多上下文考虑以下场景,
//Backend (deployed to cloud functions)
exports.signout = functions.https.onCall((data, context) => {
if(context.auth){
//do signout stuff and return true
}
else{
//not logged in so you can't sign out return false
}
});
//Client
let signout = firebase.functions().httpsCallable('signout');
signout()
.then(res => console.log("signed out"))
.catch(err => console.log(err))
简单地说,在客户端创建httpsCallable('signout') 时,根据文档,我应该在“授权”标头中包含用户令牌,以便我可以从我的可调用函数访问context.auth。我不明白的是应该如何在那里设置标题?最合乎逻辑的事情是在登录时设置它,但它不像为 axios 设置默认标头,因为调用不完全是一个 http 请求,而是我们使用那个特殊的 httpsCallable 函数。那么应该如何/何时设置 auth 标头?
【问题讨论】:
-
你能分享你的代码吗? Cloud Function 以及身份验证机制。
-
@RenaudTarnec 我刚刚更新了我的问题以解释我对可调用函数机制的理解。
-
您说“在前端,我正在使用 Firebase 身份验证(这是 firebase 上的 http 功能)登录用户”。您如何准确地进行身份验证?你用JavaScript SDK吗?如果不是,是什么原因?
-
我在云端的登录功能中使用
firebase.auth().signInWithEmailAndPassword。 -
如果您使用的是
firebase.auth().signInWithEmailAndPassword(),它应该可以工作:身份验证成功后,Firebase 身份验证令牌会自动包含在对可调用函数的请求中。您的身份验证代码中可能有错误。您应该分享它以便我们能够帮助您。
标签: firebase google-cloud-functions