JWT:未直接访问服务器 (localhost:3001/login) 时未设置 Cookie (MERN)

JWT: Cookies not being set when server (localhost:3001/login) is not accessed directly (MERN)

所以我正在尝试创建一个用于身份验证的令牌。

场景一: 当我直接访问我的本地服务器时 localhost:3001/login 我能够 update/set cookies。这是我的代码片段:

app.get('/login', async (req, res) => {
  const run_query = (username, password) => {
    UserModel.findOne({ username:username }, (e, obj) => {
      if(obj === null)
        res.send('no user')

      else if(e)
        res.send(obj)

      else {
        bcrypt.compare(password, obj.password, function(e, resp) {
          if(resp) {
            const accessToken = createTokens(obj)

            res.cookie(`access-token`, accessToken);
            res.send(obj)
          }
          else
            res.send('wrong password')
        })
      }
    })
  }
  run_query(req.body.username, req.body.password)
})

场景二: 当我尝试通过 axios.get 访问 localhost:3001/login 时单击按钮(React),我能够 运行 我的查询成功并发送用户的 obj 数据,但它没有设置 cookie。

以下是我通过 React 访问 /login 的方式:

  const login = async () => {
    try {

      const res = await axios.get('http://localhost:3001/login', {
        username: username,
        password: password
      })

      const loginTrue = (res) => {
        setLogged(true)
        console.log(res)
      }

      res.data === 'wrong password' ? alert('Wrong Password')
        : res.data === 'no user' ? alert('Username not Found')
        : res.data === 'empty' ? alert('Please Fill up all fields')
        : res.data._id !== undefined && res.data._id !== '' ? loginTrue(res.data)
        : alert('Error: ' + res.data.Error)

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

问题:

我一定是漏掉了什么或者做错了什么。谢谢!

this thread 关于 cookie 本身的工作方式以及 Axios 如何处理它们。根据您的环境,有几项可能会起作用,所以我不会重复它。