res.cookie无法与Electron一起使用

时间:2018-06-30 02:49:55

标签: express cookies electron

我无法在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的目的是确保仅登录的用户可以访问受限制的端点,那似乎并没有太大帮助。

0 个答案:

没有答案