当前位置: 首页 > 知识库问答 >
问题:

从后端发送但在前端未正确设置的Cookie

史钊
2023-03-14

我遇到了这个问题:

  • 本地主机:3000(React应用程序)
  • 本地主机:9000(节点后端)

我可以从邮递员那里发送请求并接收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中,如图所示

共有2个答案

秦涵涤
2023-03-14

我能够通过以下步骤解决问题:

    确保获取请求
  1. 具有withCredntials:true凭据:“include”,因此获取请求将如下所示:
    fetch("http://localhost:9000/testAPI", {
                withCredntials: true,
                credentials: 'include'
    })

请记住,这仅适用于GET请求,而不是没有第二步的POST请求。

注意:根据@ikhvjs的with Credntials: true不是必需的,但是我还没有尝试过,所以请自担风险。

谢谢大家的帮助: D

訾雅畅
2023-03-14

这里有一个有助于理解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