我正在尝试配置我的ngx来使用REST连接到Firebase。堆栈溢出上的大多数帖子指示使用Firebase的SDK重写身份验证代码。这不是我想要的。相反,ngx已经被设计为使用REST进行身份验证,Firebase也支持它。因此,我决定采用这种方法尽可能多地使用ngx代码库。
我在NB_CORE_PROVIDERS ( core.module.ts
)下的设置如下(仅显示简单的登录设置):
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:‘’}而不是在data属性中包装您的响应
这意味着:
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控制台进行验证。
但是,这只得到返回的六个属性中的一个。我尝试了key: 'data'
,但是它给了我一个类似的错误。如何正确配置令牌密钥,以便存储令牌的所有六个属性?
或者,我不应该尝试获取其他属性,而应该坚持使用idToken
?在这种情况下,当API返回有效负载中的其他内容时,我如何指定不同的令牌(例如,当请求电子邮件验证时,Firebase只返回有效负载中的kind
和email
)。
非常感谢。
发布于 2019-01-14 21:30:25
试着用这个:
key: 'idToken'
},
它为我工作,与一个成功的authResult。良好编码;
https://stackoverflow.com/questions/49787339
复制相似问题