我无法在Electron应用程序中通过Express服务器设置Cookie。
这是我的登录页面上的登录事件侦听器:
loginButton.addEventListener('click', () => {
const email = document.getElementById('email').value;
const password = document.getElementById('password').value;
auth.signInWithEmailAndPassword(email, password)
.then((data) => {
console.log('user data is', data);
return data.user.getIdToken();
})
.then((idToken) => {
return axios.post(serverURL + '/sessionLogin', {idToken});
})
.then(() => {
axios.get(serverURL + '/test', {withCredentials: true});
})
.catch((err) => {
console.log('err trying to get id token', err);
// alert('Error logging in - are you sure you have the right email and password?');
document.getElementById('email').value = '';
document.getElementById('password').value = '';
});
});
我服务器上的sessionLogin端点是:
const cookieParser = require('cookie-parser');
...
app.use(cookieParser());
...
app.post('/sessionLogin', (req, res) => {
const idToken = req.body.idToken.toString();
console.log('id token is', idToken)
const expiresIn = 60 * 60 * 24 * 5 * 1000;
admin.auth().createSessionCookie(idToken, {expiresIn})
.then((sessionCookie) => {
const options = {maxAge: expiresIn, httpOnly: true, secure: true};
res.cookie('session', sessionCookie, options);
res.end(JSON.stringify({status: 'success'}));
})
.catch((err) => {
res.status(401).send('UNAUTHORIZED REQUEST!');
})
});
以上大部分是Firebase建议的代码。调用res.cookie时,我认为应该在客户端浏览器中创建一个cookie。但是,当我立即致电此测试端点时,服务器看不到任何Cookie。
app.get('/test', (req, res) => {
console.log('req.cookies are', req.cookies) //req.cookies are {}
res.send('ok');
});
我正在使用cookie解析器。这与Electron的工作方式有所不同吗?我知道您可以使用Electron手动设置cookie,但是,如果cookie的目的是确保仅登录的用户可以访问受限制的端点,那似乎并没有太大帮助。