【问题标题】:ExpressJS set/get/use cookiesExpressJS 设置/获取/使用 cookie
【发布时间】:2013-11-04 16:20:22
【问题描述】:

无法在请求中获取设置的 cookie。

我用

设置我的 cookie
response.cookie('name', 'My name');

我想以这种方式获取我的 cookie,以前也可以,但我更改了 express 配置,现在不知道问题出在哪里。

request.cookies is and empty Object

我的快递配置:

var express = require('express'),
    api = require('./routes/api');

var app = express();

app.configure(function () {
   app.set('port', process.env.PORT || 3000);
   app.use(express.favicon());
   app.use(express.logger('dev'));
   app.use(express.json());
   //app.use(express.bodyParser());
   app.use(express.compress()); // New call to compress content
   app.use(express.cookieParser());
   app.use(express.session({secret: 'secret'}));
   app.use(app.router);
   app.use(express.methodOverride());
   //app.use(express.static(__dirname + '/public'));
});

app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
    next();
});

app.configure('development', function () {
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function () {
    app.use(express.errorHandler());
});

设置 Cookie:

exports.singIn = function (req, res) {
    var mail = req.query.mail,
        password = req.query.password;

    return user.find({
        mail: mail
    }).then(function (d) {
        var user = usersData(u);

        res.cookie('mail', user.mail, { maxAge: 900000});
        res.cookie('password', crypted, { maxAge: 900000});
        res.json({ user: user });
        return { user: user }
    }).catch(function () {
        res.json(400, {"error-tag": "error-sing-in"});
        return {"error-tag": "error-sing-in"};
    });
};

获取 Cookie:

exports.account = function (req, res) {
    var mail = req.cookies.mail,
        password = req.cookies.password;
    //here req.cookies is an empty object. I don't know why? 
};

【问题讨论】:

  • 你如何/在哪里打电话给"singIn"?
  • 我认为你需要使用 cookieSession 中间件。见stackoverflow.com/a/18510185/446681
  • singIn 在用户使用其主密码和密码唱歌时被调用。在获取用户的所有数据时使用帐户。
  • 如果我添加 app.use(express.cookieSession({ cookie: { path: '/', maxAge: 3600000 } }));我收到此错误:XMLHttpRequest 无法加载 127.0.0.1:3000/oauth/sing/in?mail=da@da.da&password=dada。 Access-Control-Allow-Origin 不允许来源localhost:4400
  • 我在 cookieSession 中需要一个秘密:app.use(express.cookieSession({ secret: 'tobo!', cookie: { maxAge: 60 * 60 * 1000 }}));但仍然没有成功:(

标签: javascript node.js session cookies express


【解决方案1】:

2017 年的答案..

const cookieParser = require('cookie-parser');
const express = require('express');
const app = express();
app.use(cookieParser());

从传入请求中获取 cookie ..

let cookie = req.cookies['cookiename'];

设置响应 cookie(此 cookie 将在所有未来传入的请求中发送,直到删除或到期)..

res.cookie('cookiename', 'cookievalue', {
    maxAge: 86400 * 1000, // 24 hours
    httpOnly: true, // http only, prevents JavaScript cookie access
    secure: true // cookie must be sent over https / ssl
});

删除响应 cookie ..

res.cookie('cookiename', 'cookievalue', {
    maxAge: 0
});

【讨论】:

    【解决方案2】:

    当这是您需要的中间件功能时,使用额外的包(“cookie-parser”)有点夸张:

    function cookieParser(req, res, next) {
      var cookies = req.headers.cookie;
      if (cookies) {
        req.cookies = cookies.split(";").reduce((obj, c) => {
          var n = c.split("=");
          obj[n[0].trim()] = n[1].trim();
          return obj
        }, {})
      }
      next();
    }
    app.use(cookieParser);
    

    我无法在我的 graphQL 服务器中使用“cookie-parser”,因为它搞砸了。

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      相关资源
      最近更新 更多