当我使用节点作为后端时,浏览器中未设置 cookie

问题描述 投票:0回答:2

浏览器中未设置 Cookie。我使用节点作为后端。我正在尝试搜索问题,有人告诉我,cookie 不会设置,因为我使用 React 作为前端,使用 Node 作为支持,两者都在本地主机的同一虚拟服务器上运行。这就是它发生的原因。 这是我的代码请帮忙。 用户.js

const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const RegisterModel = require("../Model/RegisterModel")
const signIn = async (req,res)=>{
    try {
       const data = await RegisterModel.findOne({Email:req.body.email})
       const passwordMatch = await bcrypt.compare(req.body.password,data.Password)
       const token = await jwt.sign({Email : data.Email}, process.env.SECRET)
       
       if(!data) return res.status(404).json({islogin:false, message: "User doesn't exist" })
       if(!passwordMatch) return res.status(400).json({islogin:false,message: "Incorrect Password"})
       
       if(passwordMatch){
        res.cookie('newToken',token, { maxAge: 900000, httpOnly: false});
        res.status(200).send({id:data._id,email:data.Email,name:data.Name,islogin:true,token:token})
        
         }
    } catch (error) {
        res.status(404).json({islogin:false,message:"User doesn't exist"})
        console.log(error)
    }
}


module.exports = {signIn,signUp};

app.js

const express = require('express');

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

var cors = require('cors')
const PORT = process.env.PORT ;
const router = require("./Router/Router")

app.use(cors())
app.use(express.json())
app.use(express.urlencoded({extended:false}));
app.use(router);
require("./Connection/Connection")


app.listen(PORT,()=>{
        console.log(`Listen at Port ${PORT}` )
})
node.js reactjs cookies mern
2个回答
2
投票

要将凭据数据设置到浏览器中,必须在同一域上运行两端,后端应在 localhost 或 127.0.0.1 上运行,前端应分别在 localhost 或 127.0.0.1 上运行。 或

后端和前端运行在 =localhost 或

后端和前端运行在=127.0.0.1

如果您不确定,请在控制台上显示错误。这里

浏览器建议您有关 cookie 的错误。

还在后端设置 cors 策略=

cors({origin:"http:localhost:frontendPORT",凭证:true})

http 请求的前端端,必须设置credentials= true

这个方法对我来说花了4天后才有效。


0
投票

如果您使用 MERN React Node 如果您使用的是 Axios 在 React 应用程序的顶层添加以下行(例如 App.js)

axios.withCredentials = true
**在后端

install cors
&
添加以下行**

import cors from "cors"; import cookieParser from "cookie-parser"; app.use(cookieParser()); app.use(express.json()); app.use(cors({ credentials: true }));
    
© www.soinside.com 2019 - 2024. All rights reserved.