gpt4 book ai didi

node.js - res.cookie未在浏览器中设置cookie

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:23 24 4
gpt4 key购买 nike

我目前正在尝试使用 React 客户端设置 Node/Express 应用程序以与之交互。我设置了护照来处理 JWT 身份验证。当用户登录时,我验证电子邮件/密码。然后我设置cookie:

res.cookie('jwt', token, { httpOnly: true, secure: false });

我看到 token 在响应 header 中传回,但是当我在开发人员工具 > 应用程序 > Cookie 下检查 Chrome 浏览器的 cookie 时,我看到一个空 cookie。我做错了什么以及如何在后续请求的响应 header 中发送 jwt?

服务器/App.js

const app = express()

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.use(cookieParser());

app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});

app.post('/login', (req, res) => {
passport.authenticate('local', { session: false }, (error, user) => {
if (error || !user) {
res.status(400).json({ error });
}

// Construct JWT payload
const payload = {
email: user.email,
expires: Date.now() + parseInt(process.env.JWT_EXPIRATION_MS),
};

// Assign payload to req.user
req.login(payload, {session: false}, (error) => {
if (error) {
res.status(400).send({ error });
}
// Generate a signed JWT
const token = jwt.sign(JSON.stringify(payload), process.env.JWT_SECRET);

// Assign JWT to cookie
res.cookie('jwt', token, { httpOnly: true, secure: false });
res.status(200).send({ email: user.email });
});
})(req, res);
});

client/LoginModal.js

  handleLogin = async () => {
const { name, email, password } = this.state

try{
const res = await axios.post('http://localhost:8080/login', {
email: email,
password: password,
})

if(res.status == 200){
console.log("Logged in")
console.log(res)
}

} catch (err) {
console.log(err)
}
}

编辑:我当前的解决方法是将 token 作为有效负载的一部分发送。然后,我的 React 客户端从有效负载中获取 token 并将其存储在浏览器的 cookie 中。有没有办法避免这种解决方法(例如见下文)?

服务器

 res.status(200).send({ email: user.email, jwt: token });

客户端

  if(res.status == 200){
cookies.set('jwt', res.data.jwt)
cookies.set('email', res.data.email)
}

最佳答案

在调用 axis.post() 时,您必须传递 {withCredentials: true,credentials: 'include'} 作为第二个参数,只有这样您的浏览器才会设置 cookie。

关于node.js - res.cookie未在浏览器中设置cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53787770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com