在我的项目中,当用户登录时,将触发auth更改并调用getIdToken,然后该令牌由HTTP帖子发送到后端服务器,在该服务器上对其进行验证,然后将其用作cookie。 然后,每次用户请求一个私人页面来验证其身份和访问权限时,都将重新验证并使用此Cookie。
直到id令牌过期,此操作一直有效。在这一点上,它失败了,我找不到将新生成的令牌用作cookie的方法。
答案 0 :(得分:0)
它现在如下工作。
后端身份验证检查:
def cities(request, pk):
country = Post.objects.get(id=pk).country # you could also do get_object_or_404
cities = Post.objects.filter(country=country).values('city')
# you could also add .distinct('city') to de-duplicate cities
return render(request, 'users/cities.html', {"cities": cities})
refreshToken呈现给客户端:
function checkAuth(req, res, next) {
if(!req.session.token)
{
return res.redirect("login");
}
else{
admin.auth().verifyIdToken(req.session.token).then(function(decodedToken) {
req.session.uid = decodedToken.uid
next();
}).catch(function(error) { // expired token
return res.render("refreshToken");
});
}
}
返回后端:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
firebase.auth().currentUser.getIdToken(true).then(function(idToken) {
fetch("/refreshToken",{method: "POST",body:"newToken="+idToken, headers:{'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}).then(function(response){
if(response.ok){
location.reload(true)
}
})
.then(function(data){
if(data.suc == 0){
window.location.replace("/login");
}
});
}).catch(function(error) {
});
}
else{
window.location.replace("/login");
}