我正在尝试将我的ngx-admin配置为使用REST API连接到Firebase。 Stack Overflow上的大多数帖子都指示使用Firebase的SDK重写身份验证代码。这不是我想要的。相反,ngx-admin已经设计为使用REST API进行身份验证,Firebase也支持这种身份验证。因此,我决定采用这种方法尽可能地使用ngx-admin代码库。
core.module.ts
中NB_CORE_PROVIDERS下的设置如下(为简单起见,仅显示登录设置):
providers: {
email: {
service: NbEmailPassAuthProvider,
config: {
baseEndpoint: 'https://www.googleapis.com/identitytoolkit/v3/relyingparty',
delay: 3000,
login: {
rememberMe: true,
endpoint: '/verifyPassword?key='+environment.firebase.apiKey,
},
// ...
token: {
// How to set this properly for Firebase?
},
},
},
},
我的难点在于如何为Firebase正确设置令牌。 https://akveo.github.io/nebular/#/docs/auth/getting-user-token上的教程说明了
默认情况下,Nebular希望您的令牌位于JSON响应的data.token键下
这转换为@nebular/auth/providers/email-pass-auth.provider.ts
中的以下默认设置:
token: {
key: 'data.token',
getter: (module: string, res: HttpResponse<Object>) => getDeepFromObject(res.body,
this.getConfigValue('token.key')),
},
然后教程给出了一个假设:
的例子我们的API返回一个令牌,只是{token:'some-jwt-token'}没有将你的回复包装在数据属性中
这转换为:
token: {
key: 'token', // this parameter tells Nebular where to look for the token
},
首先我尝试跳过令牌设置(这意味着我使用默认值key: 'data.token'
。虽然我可以获得200状态代码(这意味着我已成功连接到Firebase),但我收到以下错误: NbEmailPassAuthProvider: Token is not provided under 'data.token' key with getter 'function (module, res) { return Object(__WEBPACK_IMPORTED_MODULE_9__helpers__["getDeepFromObject"])(res.body, _this.getConfigValue('token.key')); }', check your auth configuration.
然后我尝试了key: 'token'
,这给了我一个类似的错误。
在https://firebase.google.com/docs/reference/rest/auth/#section-sign-in-email-password查阅Firebase文档后,我发现Firebase的响应有效负载包含六个属性:kind, idToken, email, refreshToken, expliresIn, localId, registered
。然后我尝试了key: 'idToken'
,这次它起作用了。我可以成功登录Firebase。尝试相同的注册也成功在Firebase中签了名,我可以从Firebase控制台验证。
但是,这只会返回六个属性中的一个。我尝试了key: 'data'
,但它给了我一个类似的错误。如何正确配置令牌密钥,以便我可以存储令牌的所有六个属性?
或者,我是否应该尝试获取其他属性但应该坚持使用idToken
?在这种情况下,当API返回有效负载中的其他内容时,如何指定不同的令牌(例如,在请求电子邮件验证时,Firebase仅在有效负载中返回kind
和email
。
非常感谢。
答案 0 :(得分:0)
尝试一下:
key: 'idToken'
},
它为我工作,具有成功的authResult。 良好的编码;