为什么 req.cookies 未定义?

新手上路,请多包涵

情况:

我正在尝试检查我的用户在向服务器发出请求时是否经过身份验证。

我用谷歌搜索了一下,发现了这个:

如果用户通过 firebase 登录,如何显示不同的页面

所以这是我使用这个库实现这个解决方案的尝试:

https://github.com/js-cookie/js-cookie/blob/latest/src/js.cookie.js


代码:

服务器端

  var cookies = require("cookie-parser");

  router.get("/", function(req, res, next){

      const { token } = req.cookies;

      console.log('Verifying token', token);

 });

客户端

<script src="/public/js/cookieScript.js"> </script>

<a href="/upload" class = "authIn uploadButton btn btn-success pull-right">UPLOAD</a>

<script>

        const setAppCookie = () => firebase.auth().currentUser &&
            firebase.auth().currentUser.getToken().then(token => {
                Cookies.set('token', token, {
                    domain: window.location.hostname,
                    expire: 1 / 24, // One hour
                    path: '/',
                    secure: true // If served over HTTPS
             });
        });

</script>

原文由 Coder1000 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 241
2 个回答

显然,您的代码在服务器上是正确的。因此,cookie 不能在客户端上正确设置。

复制/粘贴您找到的有关在不使用 SSL 时禁用安全 cookie 的解决方案:

     const setAppCookie = () => firebase.auth().currentUser &&
                firebase.auth().currentUser.getToken().then(token => {
                    Cookies.set('token', token, {
                        domain: window.location.hostname,
                        expire: 1 / 24, // One hour
                        path: '/',
                        secure: false // <-- false here when served over HTTP
                 });
            });

原文由 Pandaiolo 发布,翻译遵循 CC BY-SA 3.0 许可协议

除了需要 cookie-parser 你还应该配置你的 express 应用程序来使用它:

 var express = require('express');
var app = express();
var cookies = require("cookie-parser");

app.use(cookies());

原文由 dNitro 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题