为什么req.cookies未定义?

时间:2017-01-18 13:31:36

标签: javascript node.js cookies firebase firebase-authentication

情况:

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

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

How to show different page if user is logged in via firebase

因此,我尝试使用此库实现此解决方案:

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

CODE:

服务器侧

  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>

5 个答案:

答案 0 :(得分:3)

我认为你应该粘贴一些服务器端代码。

你需要在app.router之前使用express.cookieParser();中间件按顺序运行,这意味着它在执行路由之前甚至从未到达cookieParser()。

答案 1 :(得分: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
                 });
            });

答案 2 :(得分:1)

除了要求 cookie-parser 之外,您还应该配置您的快速应用程序以使用它:

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

app.use(cookies());

答案 3 :(得分:1)

我发现了这个问题!

我的Cookie未通过https(尚未)提供。

 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
             });
        });

secure需要设置为false

答案 4 :(得分:0)

您是否启用了Cookie解析器中间件? (https://www.npmjs.com/package/cookie-parser