javascript - Node + Express + Nginx 未设置 Cookie

标签 javascript node.js express nginx cookies

我有一个使用 Express 的 Node 应用程序,我尝试为我的客户端设置 cookie。它在本地环境(http)上运行良好。但是一旦我投入生产(https),我就很好地收到了cookie(我可以在响应中看到它),但它没有设置。有什么想法吗?

Nginx 配置:

http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;
  gzip on;

  server {
    listen 443 ssl default_server;
    listen [::]:443 default_server;
    server_name back.domain.com;

    ssl_certificate  /etc/letsencrypt/.../fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem;

    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
  }
}

Node 应用程序:

const api = express()

api.enable('trust proxy')
api.use(cors({origin: 'https://front.domain.com', credentials: true}))

api.post('/login', (req, res) => {
  // validate credentials and generate token
  // set expires to 24h

  res
    .cookie('token', token, {expires, httpOnly: true, secure: true})
    .sendStatus(204)
})

正面:

// I use the axios lib
axios({
  baseURL: 'https://back.domain.com',
  url: '/login',
  withCredentials: true,
  method: 'POST'
}

最佳答案

经过几个小时的研究,我发现...创建 cookie 时,我必须将 domain 键设置为 domain.com:

res
  .cookie('token', token, {expires, httpOnly: true, secure: true, domain: 'domain.com'})
  .sendStatus(204)

关于javascript - Node + Express + Nginx 未设置 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54564174/

相关文章:

Javascript 上下文菜单点击事件/检测 - 过滤粘贴内容

node.js - 如何使 node.js 应用程序永久运行?

node.js - 从 Loopback 远程方法返回 XML 作为响应

javascript - 在 Node/Express 中将 CSV 转换为 XML 的优雅方式

Javascript promise 意外的执行流程

javascript - 如何在 html 或 Javascript 中创建 "first-load"事件?

javascript - 为什么这段代码不同步执行?

node.js - Node 前 gyp 错误!堆栈错误: Failed to execute '/usr/local/bin/node/usr/local/lib/node_modules

node.js - 从一个类别解析 youtube

mysql - Bookshelf(knex) - belongsToMany 关系不起作用