在ngx-admin中设置令牌以连接到Firebase

时间:2018-04-12 03:07:35

标签: angular rest firebase firebase-authentication token

我正在尝试将我的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仅在有效负载中返回kindemail

非常感谢。

1 个答案:

答案 0 :(得分:0)

尝试一下:

  key: 'idToken'
},

它为我工作,具有成功的authResult。 良好的编码;