在 Vue 中使用 $http.get (Vue-Resource) 获取和发送 Firebase 实时数据库授权令牌
Getting and Sending Firebase Realtime Database Auth Token with $http.get (Vue-Resource) in Vue
我想我从根本上误解了它是如何工作的,我让自己陷入了困境。我花了两天时间试图解决这个问题,但我想我被卡住了,需要一些帮助才能回到正确的轨道上。
我有一个具有这些规则的 FB 实时数据库:
{
"rules": {
// any logged-in user access your data
".read": "auth != null",
".write": "auth != null"
}
}
我可以注册用户并让他们登录。但我似乎无法弄清楚如何获取令牌,然后将其与我的 $http.get 请求一起发送。目前我正在检查 auth() 更改,但我有点困惑我应该随请求一起发送的令牌是哪个。我发现的一些事情表明我应该使用 refreshToken:
firebase.auth().onAuthStateChanged(user => {
store.dispatch("updateUserStore", {'token': user.refreshToken, 'uid': user.uid});
});
令牌和 UID 然后存储在我的 Vuex 存储中 - 但是当我发送令牌时,我收到此响应:
this.$http.get('users/'+uid+'.json?auth='+token)
.then(response => {
return response.json();
})
.then(data => {
// do something
});
回复:
{error: "Could not parse auth token."}
我搜索了错误并尝试尽可能多地遵循帮助,但 none 似乎有帮助。我知道我可以改用 Axios,但我想了解为什么这不起作用而不是避免这个问题,因为显然这里发生了一些我不明白的事情。
提前致谢!
如 REST API doc, you need to "follow the steps in Retrieve ID tokens on clients 中所述。
所以,你应该做如下(未经测试):
firebase.auth().onAuthStateChanged(user => {
user.getIdToken(/* forceRefresh */ true)
.then(idToken => {
store.dispatch("updateUserStore", {'token': idToken, 'uid': user.uid});
}).catch(function(error) {
// Handle error
});
});
HOWEVER,请注意 ID 令牌会在短时间(一小时)后过期,因此当用户的登录状态发生变化(即通过 onAuthStateChanged
)。事实上,令牌可能会在用户登录状态没有任何变化的情况下过期。
我想我从根本上误解了它是如何工作的,我让自己陷入了困境。我花了两天时间试图解决这个问题,但我想我被卡住了,需要一些帮助才能回到正确的轨道上。
我有一个具有这些规则的 FB 实时数据库:
{
"rules": {
// any logged-in user access your data
".read": "auth != null",
".write": "auth != null"
}
}
我可以注册用户并让他们登录。但我似乎无法弄清楚如何获取令牌,然后将其与我的 $http.get 请求一起发送。目前我正在检查 auth() 更改,但我有点困惑我应该随请求一起发送的令牌是哪个。我发现的一些事情表明我应该使用 refreshToken:
firebase.auth().onAuthStateChanged(user => {
store.dispatch("updateUserStore", {'token': user.refreshToken, 'uid': user.uid});
});
令牌和 UID 然后存储在我的 Vuex 存储中 - 但是当我发送令牌时,我收到此响应:
this.$http.get('users/'+uid+'.json?auth='+token)
.then(response => {
return response.json();
})
.then(data => {
// do something
});
回复:
{error: "Could not parse auth token."}
我搜索了错误并尝试尽可能多地遵循帮助,但 none 似乎有帮助。我知道我可以改用 Axios,但我想了解为什么这不起作用而不是避免这个问题,因为显然这里发生了一些我不明白的事情。
提前致谢!
如 REST API doc, you need to "follow the steps in Retrieve ID tokens on clients 中所述。
所以,你应该做如下(未经测试):
firebase.auth().onAuthStateChanged(user => {
user.getIdToken(/* forceRefresh */ true)
.then(idToken => {
store.dispatch("updateUserStore", {'token': idToken, 'uid': user.uid});
}).catch(function(error) {
// Handle error
});
});
HOWEVER,请注意 ID 令牌会在短时间(一小时)后过期,因此当用户的登录状态发生变化(即通过 onAuthStateChanged
)。事实上,令牌可能会在用户登录状态没有任何变化的情况下过期。