我遇到了这个问题:
我可以从邮递员那里发送请求并接收cookie,但是当我在浏览器中检查cookie时,在前端什么也没有。
Cookie在应用程序下不可见
我用于提交注册和发送cookie的代码:
// requirements
const User = require('../models/User');
const jwt = require('jsonwebtoken');
// handle errors
const handleErrors = (err) => {
console.log(err.message, err.code);
let errors = { first_name: '', last_name: '', email: '', password: '' };
// duplicate error code
if (err.code === 11000) {
errors.email = 'That email is already registered';
return errors;
}
// validation errors
if (err.message.includes('User validation failed')) {
Object.values(err.errors).forEach(({ properties }) => {
errors[properties.path] = properties.message;
});
}
return errors;
}
const maxAge = 3 * 24 * 60 * 60;
const createToken = (id) => {
return jwt.sign({ id }, 'Dummy Secret', {
expiresIn: maxAge
});
}
// module exporting
module.exports.signup_post = async (req, res) => {
const { first_name, last_name, email, password } = req.body;
try {
const user = await User.create({ first_name, last_name, email, password });
const token = createToken(user._id);
res.cookie('jwt', token, { httpOnly: true, maxAge: maxAge * 1000 });
res.status(201).json({ user: user._id });
}
catch (err) {
const errors = handleErrors(err);
res.status(400).json({ errors });
}
};
如果有人能指导我该怎么做,我将不胜感激
更新:我做了一些测试,结果如下:当我在主应用程序中运行此代码时.js在后端并从前端发送请求时,cookie仍然搞砸了,所以它很可能是前端。
app.get('/set-cookies', (req, res) => {
res.cookie('newUesr', false);
res.cookie('isEmployee', true, { maxAge: 1000 * 60 * 60 * 24, httpOnly: true});
res.send('you got the cookies!');
});
app.get('/read-cookies', (req, res) => {
const
});
但是,当我在前面显示的代码中通过我的控制器这样做时,它卡在设置的cookies中,如图所示
我能够通过以下步骤解决问题:
withCredntials:true
和凭据:“include”
,因此获取请求将如下所示: fetch("http://localhost:9000/testAPI", {
withCredntials: true,
credentials: 'include'
})
请记住,这仅适用于GET
请求,而不是没有第二步的POST
请求。
注意:根据@ikhvjs的with Credntials: true
不是必需的,但是我还没有尝试过,所以请自担风险。
谢谢大家的帮助: D
这里有一个有助于理解httpOnly cookies和替代方法的链接。如何在React中获取HTTP-only cookie?
问题内容: 这必须是一些错误的配置 我在本地主机上安装了Redis。 尝试通过Rails控制台连接到它时 我无法发送命令,但我得到了 我不记得设置密码,也不知道在哪里可以找到密码 如果我使用其他URL(例如rediscloud或redistogo),则可以发送命令(以密码设置密码) 据我了解,该错误表明我正在发送密码,但是redis没有密码。但是,如您所见,我没有设置任何密码。 有办法调试吗? 问
我的笔记本电脑上安装了Java14和Java8,但默认情况下我想使用8,所以我尝试将我的java_HOME设置为使用-V1.8。 在~/。bash_profile我添加了一行。执行此操作后,立即返回正确的路径,返回正确的版本。然而,如果我关闭终端并再次打开它,将产生一个空行,显示JAVA 14。编辑之后。bash_profile我做的当我重新打开终端并执行行设置JAVA_HOME仍然存在。为什么我
})。然后(res= 预期的数据应该是 它正在回归的是
我希望在调试这个问题时得到一些帮助。如果我将以下JSON发送到后端,它将正常工作: 但是,如果我现在发送以下内容: 我得到了上面的错误。在我的后端代码中,我有以下代码: API 方法签名如下所示: 我认为我遇到的问题是JSON不能被解析为ZonedDateTime。有人对以下两个问题有什么建议吗?( json字符串格式ZonedDateTime自动接受什么时间,( 2)如何创建DTO来解析zone
问题内容: 我的Web应用程序的后端接收来自多个客户端的更新。发生此类更新时,应将其传达给所有其他客户端。 后端更新后,如何启动从服务器到所有Web浏览器客户端的更新? 我正在使用JBoss,JSF和Spring框架。 问题答案: 参见类似的堆栈溢出问题:WebSockets与服务器发送的事件/EventSource 我假设像DarthVader一样,您的前端是某种(通常)无状态的HTML页面。浏
我正在关注一个关于udemy上的节点.js的课程,这有点过时了,遇到了这些错误,我无法找到解决方案。 我尝试了什么: 使用next(); 在所有if语句中添加返回res 有人能帮我修一下这些吗?我将不胜感激! 提前感谢! 用户名存在错误:错误 [ERR_HTTP_HEADERS_SENT]:在服务器响应.set 上将标头发送到客户端后无法设置标头 (_http_outgoing.js:526:11