【问题标题】:Cannot get jwt token from cookies无法从 cookie 获取 jwt 令牌
【发布时间】:2023-02-14 18:45:53
【问题描述】:

我正在使用 mern stack 来制作一个网站。我正在使用 jwt 并尝试将它们存储在 cookie 中。我用参数调用了 res.cookie 函数(你可以在下面找到代码)。但不知何故,我无法在浏览器中找到 cookie。 no cookie found(top portion) whereas name of cookie(=jwt) found in network tab in inspect

但是当我检查检查中的网络选项卡时,Set-cookie 中存在一个 cookie。

假设已经存储了 cookie,我尝试访问 jwt 令牌,但没有成功。

我正在提供下面的代码。

这是我的文件,其中写入了所有路由。

const express = require ("express")
const Resident = require("../models/residentModels");
const bcrypt = require("bcrypt");
// const jwt = require("jsonwebtoken");
const cookieParser = require("cookie-parser");

const router = express.Router();

router.post("/register", async (req, res) =\> {
try {
const resident = new Resident(req.body);

        console.log(req.body);
    
        // password hash 
        // middleware
        const token = await resident.generateAuthToken();
    
        console.log("token: " + token);
    
        res.cookie("jwt", token, {
            httpOnly: true,
            expires: new Date (Date.now() + 12342)
        })
        // console.log(cookie);
    
        const newResident = await resident.save();
    
        console.log("hehe" + newResident);
        // console.log(newResident._id);
        // console.log(newResident._id.toString());
    
        res.status(200).send("Record Added Successfully");
    } catch (error) {
        console.log(error);
        res.status(200).send("Record Creation Unsuccessfull");
    }

})

router.post("/login", async (req, res) =\> {
try {
let blockNumber = req.body.blockNumber;
let flatNumber = req.body.flatNumber;
let password = req.body.password;

        console.log(blockNumber)
        console.log(flatNumber)
        console.log(password)
    
        const response = await Resident.findOne({blockNumber: blockNumber, flatNumber:flatNumber});
    
        console.log(response);
    
        const isMatch = await bcrypt.compare(password, response.password);
    
        console.log("isMatch: " + isMatch);
    
        const token = await response.generateAuthToken();
        console.log("token part: " + token);
    
        let cookie = res.cookie("jwt", token, {
            httpOnly: true,
            expires: new Date (Date.now() + 10000)
        })
        // console.log(cookie)
    
        // console.log(`this is the cookie awesome !! + ${req.cookies.jwt}`);
        let jwtToken = req.cookies;
        console.log("req.cookies.jwt: " + jwtToken);
    
        if(isMatch){
            res.status(200).send("Successful Login");
        }
        else{
            res.status(200).send("Invalid Login Details");
        }
    } catch (error) {
        res.status(200).send("Invalid Login Details");
    }

});

module.exports = router;

这是我的 index.js 文件:

const express = require("express");
require('./db/conn');
const Resident = require("./routes/residentRoutes");
var cors = require("cors");
const jwt = require("jsonwebtoken");
const cookieParser = require("cookie-parser");

const app = express();

app.use(cors());
app.use(express.json());
app.use(Resident);
app.use(cookieParser());

const port = process.env.PORT || 8000;

const bcrypt = require("bcrypt");

const securePassword = async (password) =\> {
const passwordHash = await bcrypt.hash(password, 10);
console.log(passwordHash);

    const passwordMatch = await bcrypt.compare(password, passwordHash)
    console.log(passwordMatch);

}

securePassword("thapa@123");

const createToken = async () =\> {
const token = await jwt.sign({\_id: "63e677a57d45b06c8557441a"}, "thisisnotformyresumebutmyideology!!!",{
expiresIn: "20 seconds"
})
console.log(token);

    const userVerify = await jwt.verify(token, "thisisnotformyresumebutmyideology!!!");
    console.log(userVerify); // returns an object

}

createToken();

app.listen(port, () =\> {
console.log(`connection successful at port ${port}`);
})

在写入所有路由的文件中,变量 jwtToken 返回“undefined”。 结果,很明显cookie没有被存储。

那么现在问题来了,我该如何存储 cookie,我哪里做错了?

P.S.:我在前端使用 React.js。

【问题讨论】:

    标签: javascript node.js express authentication mern


    【解决方案1】:

    在你的 index.js 文件中

    交换这两个:

    app.use(Resident);
    app.use(cookieParser());
    

    到:

    app.use(cookieParser());
    app.use(Resident);
    

    在访问路由之前,您需要先解析请求

    顺序与您放置代码的方式有关

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 2020-06-12
      • 2021-07-28
      • 2019-05-18
      • 2023-03-23
      • 1970-01-01
      • 2019-04-16
      • 2018-03-04
      • 2017-05-26
      相关资源
      最近更新 更多