【发布时间】:2018-09-22 01:30:37
【问题描述】:
我正在尝试将我的 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),但我收到了以下错误:@987654329 @
然后我尝试了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)。
非常感谢。
【问题讨论】:
标签: angular rest firebase firebase-authentication token