簡體   English   中英

如何使用 HTTPOnly 訪問服務器端的憑據?

[英]How can I access the credentials on the server-side with HTTPOnly?

我將 JWT 令牌作為 HTTPonly Cookie 從我的 React 應用程序發送到我的快速服務器以授權用戶。
令牌在請求 header 中發送,但我無法在服務器中間件中訪問它。

在此處輸入圖像描述

這是應該處理授權的中間件,但我無法從 header 訪問 accessToken 並獲得response status 403

const jwt = require("jsonwebtoken");
require("dotenv").config();

module.exports = function(req, res, next) {
  // Get token from header
  const token = req.header('accessToken');

  // Check if no token
  if (!token) {
    return res.status(403).json({ msg: "authorization denied" });
  }

  // Verify token
  try {
    //it is going to give use the user id (user:{id: user.id})
    const verify = jwt.verify(token, process.env.jwtSecret);

    req.user = verify.user;
    next();
  } catch (err) {
    res.status(401).json({ msg: "Token is not valid" });
  }
};

我使用 cors 並將憑據設置為 true 並將來源設置為我的網絡應用程序。

app.use(cors({origin: 'http://localhost:3001', credentials: true }));

這是我路線的重要部分:

const express = require('express');
const authorize = require('../middleware/authorize')

const router = express.Router();

router.get("/verify", authorize, (req, res) => {
    try {
      res.json(true);
    } catch (err) {
      console.error(err.message);
      res.status(500).send("Server error");
    }
  });

module.exports = router

這是我的 express.js 服務器:

'use strict';
require('dotenv').config();
const mongoose = require('mongoose')
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
const cookieParser = require('cookie-parser');

//Import Routes
const userRoute = require('./routes/user')

app.use(cors({origin: 'http://localhost:3001', credentials: true }));
app.use(bodyParser.json());
app.use(cookieParser())
app.use('/account', userRoute);

//connect to db
mongoose.connect(
    process.env.DB_CONNECTION, 
    {
        useUnifiedTopology: true,
        useNewUrlParser: true
    },
    () => console.log('connected to db!')
);

app.listen(3000, ()=>{
    console.log("***********************************");
    console.log("API server listening at localhost:3000");
    console.log("***********************************");
  });

提前致謝,感謝您的努力。

您的httpOnly cookie 作為cookies 來回發送,而不是作為它們自己的標頭,因為您已經有了 cookie-parser 中間件:您應該能夠像這樣獲取訪問令牌:

const token = req.cookies.accessToken;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM