我的cookie没有设置在浏览器中,我该如何修复?

发布于 2025-01-21 16:43:58 字数 1576 浏览 1 评论 0原文

我已经与JWT和Cookie合作,我不是为什么我的cookie不会在浏览器中设置。 如果我在Postman中进行此操作正常,可以创建cookie并看起来不错,但是当我在浏览器中使用React表单进行此操作时,Cookie却没有设置。

请任何建议

我的前端代码

const onSubmit = useCallback(async (e) => {
    e.preventDefault()
    setStatus('pending')
    setError(null)
    const credentials = {
      email: values.email,
      password: values.password
    }
    console.log(credentials)
    try {
      const res = await API.post(LOGIN_API, credentials)
      console.log(res.data)
      if (res.data.success) {
        setStatus('success')
        navigate('/')
      } else {
        setStatus('error')
      }
    } catch (err) {
      setError(error)
    }
  }, [values, error, navigate])

我的后端

const login = async (req, res) => {
  const text = 'SELECT user_id, password, email FROM user_account WHERE email=$1;'
  const values = [req.body.email]
  try {
    const response = await client.query(text, values)
    const match = await bcrypt.checkPassword(req.body.password, response.rows[0].password)
    if (match) {
      res.cookie("access_token", jwt.sign({ id: response.rows[0].user_id }, jwtSecret), { httpOnly: true })
      res.status(200).json({ success: true, message: "Logged in successfully" })
    } else {
      res.status(401).json({ success: false, message: "Credentials are not valid" })
    }
  } catch (err) {
    console.log(err.stack)
  }
}

,然后在这里我的Axios实例

import axios from 'axios'

export default axios.create({
  baseURL: process.env.REACT_APP_BASE_API_URL
})

I've working with jwt and cookies I don't why my cookie does not set in my browser.
If I do this in postman works properly, create cookie and looks well, but when I do this in my browser with my react form, cookie does not set.

Please any advice

This my frontend code

const onSubmit = useCallback(async (e) => {
    e.preventDefault()
    setStatus('pending')
    setError(null)
    const credentials = {
      email: values.email,
      password: values.password
    }
    console.log(credentials)
    try {
      const res = await API.post(LOGIN_API, credentials)
      console.log(res.data)
      if (res.data.success) {
        setStatus('success')
        navigate('/')
      } else {
        setStatus('error')
      }
    } catch (err) {
      setError(error)
    }
  }, [values, error, navigate])

my backend

const login = async (req, res) => {
  const text = 'SELECT user_id, password, email FROM user_account WHERE email=$1;'
  const values = [req.body.email]
  try {
    const response = await client.query(text, values)
    const match = await bcrypt.checkPassword(req.body.password, response.rows[0].password)
    if (match) {
      res.cookie("access_token", jwt.sign({ id: response.rows[0].user_id }, jwtSecret), { httpOnly: true })
      res.status(200).json({ success: true, message: "Logged in successfully" })
    } else {
      res.status(401).json({ success: false, message: "Credentials are not valid" })
    }
  } catch (err) {
    console.log(err.stack)
  }
}

And then here my axios instance

import axios from 'axios'

export default axios.create({
  baseURL: process.env.REACT_APP_BASE_API_URL
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

春风十里 2025-01-28 16:43:58

仅当您通过浏览器加载资源,而不是通过JavaScript加载资源,才能设置cookies。没有办法以这种方式设置httponly cookie。
通常JWT令牌存储在LocalStorage中

Cookies can only be set if you load a resource by a browser, no through JavaScript. There is no way to set httponly cookie this way.
Usually jwt tokens are stored in localStorage

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文