我正在使用NodeJ,Express Framework和Firebase开发Web应用程序。在客户端上使用firebase函数进行身份验证后,idToken将发送到服务器,在该服务器上创建会话cookie,然后将其存储在cookie中。 但是,res.cookie无法将cookie存储在客户端上。
客户端auth.js片段(全部2个都属于同一个js客户端文件)
//Log-in event start
$( "#log-form" ).submit(function( event ) {
event.preventDefault();
var email = document.getElementById('emailInput').value;
var password = document.getElementById('passwordInput').value;
firebase.auth().signInWithEmailAndPassword(email,password)
.catch(function(error) {
var errorCode = error.code;
var errorMessage = error.message;
window.alert(errorMessage);
})
.then(function(value) {
firebase.auth().currentUser.getIdToken(true)
.then(function(idToken) {
sendToken(idToken);
})
.catch(function(error) {
console.log(error.message);
});
});
});//end of log-in event
function sendToken(token)
{
$.ajax({
type: 'POST',
url: '/users/authIn',
data: {
'token' : token
},
success: function(data){
console.log(data);
},
error: function(errMsg)
{
console.log(errMsg);
}
});
}
服务器端路由/users.js代码段
router.post('/authIn', function (req, res, next) {
var token = req.body.token.toString();
var expiresIn=1000*60*60*24;
admin.auth().verifyIdToken(token)
.then(function(decodedToken){
firebase.auth().createSessionCookie(token,{expiresIn})
.then(function(sessionCookie)
{
res.cookie('session', sessionCookie);
res.send("done");
})
.catch(function(error)
{
res.send(error);
});
res.redirect('/interfacePage');
})//end of .then
.catch(function(error){
res.send(error);
})
});
我已经尝试了两天,但无济于事。我们将不胜感激。如果您的回答不只是解决问题,而是解决问题,请提供代码,因为我对ajax / express相当陌生,并且可能不熟悉某些术语/技术。
编辑:发现了灵魂
答案 0 :(得分:0)
代替:
res.cookie('session', sessionCookie);
res.send("done");
我需要使用:
res.setHeader('Cache-Control', 'private');
res.cookie('session', sessionCookie);
res.send("done");