我有以下设置:Vue Webapp,带有主机、云功能和Firestore。
将应用程序部署到谷歌云时,一切正常。当我使用firebase emulators:start --only functions,hosting
模拟功能和托管时,我可以使用托管的应用程序和云功能,但来自context.auth
的身份验证信息是未定义的。
这在云中有效,但在模拟器中无效。有什么想法或解决方案吗?注意:我还按照文档中的说明设置了管理员凭据。编辑:我有一位同事在windows上成功运行了模拟器,包括身份验证信息,但我在设置中找不到任何差异?!
export default class AuthGuard {
private readonly authentication: object;
public constructor(context: any) {
this.authentication = context.auth;
}
public isAuthenticated(): boolean {
console.log('this.authentication', this.authentication ); // this in undefined
if (this.authentication === undefined) {
throw new functions.https.HttpsError(
'unauthenticated',
'The request requires user authentication',
);
}
return true;
}
[Firebaser here]这是模拟器中的一个错误,已在7.16.2
版本中修复:https://github.com/firebase/firebase-tools/releases/tag/v7.16.2
要进行更新,只需重新安装最新版本的Firebase CLI即可。
如官方文档中所述,在Emulator中设置管理员凭据,这是一个需要配置的可选设置,以防您也想测试身份验证。
要设置身份验证,请按照以下步骤操作。
- 打开Google云控制台的"服务帐户"窗格
- 确保已选择App Engine默认服务帐户,并使用右侧的选项菜单选择创建密钥
- 出现提示时,选择JSON作为密钥类型,然后单击创建
- 将您的Google默认凭据设置为指向下载的密钥:
根据文档所示,这应该有利于测试,因为现在它将使用Admin SDK进行测试。其中一个例子是调用函数admin.auth().getUserByEmail(email)
。
除此之外,在下面的另一个案例中——现在是Github问题——您可以获得更多关于如何在本地模拟器中使用身份验证的示例和信息。
- 将firebase身份验证模拟器添加到模拟器套件
我还想补充一点,根据官方文档所示,本地Emulator处于测试版。因此,通过他们的免费支持,直接联系Firebase支持团队可能是值得的。
如果这些信息对你有帮助,请告诉我!