【发布时间】: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