使用Axios调用后Cookie未被存储在浏览器中

时间:2019-12-13 13:57:47

标签: vue.js cookies axios openapi fastapi

我正在创建一个简单的身份验证系统,并且在以下位置有一个简单的游戏项目:https://github.com/ericg-vue-questions/authentication

我正在使用的主要技术是:

  1. FastAPI(用于后端服务器)
  2. Vue用于前端UI
  3. axios从前端到后端(最终是标准的OpenAPI客户端)进行通信

我通过doing拨打axios:

axios
  .get('http://127.0.0.1:8000/api/login', {
    params: {
      username: username,
      password: password
    },
    withCredentials: true
  })
  .then((response) => {
    console.log('Logged in')
    console.log(response)
  })
  .catch(err => { console.log(err) })

在后端,设置Cookie的code是:

@app.get("/api/login", tags=["api"], operation_id = "login" )
async def login( username: str, password: str, response: Response ):

    authenticated = False

    if username in users:
        if users[ username ][ 'password' ] == password:
            authenticated = True
            response.set_cookie( key="user", value=str( users[ username ][ 'id' ] ), max_age = 60 * 60 * 24 )

    return authenticated

我可以确认在浏览器中正在发送和接收cookie,但是由于某种原因它没有被存储。我以为,唯一需要做的就是设置withCredentials:在axios get请求中为true,但这似乎不起作用。知道我做错了什么吗?

我的响应标题为:

HTTP/1.1 200 OK
date: Sun, 15 Dec 2019 01:54:14 GMT
server: uvicorn
content-length: 4
content-type: application/json
set-cookie: user=userid; Max-Age=86400; Path=/
access-control-allow-credentials: true
access-control-allow-origin: http://localhost:8080
vary: Origin

1 个答案:

答案 0 :(得分:0)

我非常确定这是因为您没有设置cookie的路径,例如“ /”。那是集合中的第四个参数。如果您在https连接中使用cookie,则还应该设置一个域。